2010-05-12 2 views
1

일부 테이블 이름을 저장 한 열거 형을 만들었습니다. ds.Tables[BGuestInfo.TableName.L_GUEST_TYPE.ToString()]과 같은 테이블의 이름을 얻는 데 사용되기를 원합니다.인스턴스를 만들 수 없지만 읽기 전용으로 사용할 수있는 열거 형을 만들 수 있습니까?

public class a 
{ 
     public enum TableName : byte 
      { 
       L_GUEST_TYPE = 0 
       ,L_AGE_GROUP = 1 
       ,M_COMPANY = 2 
       ,L_COUNTRY = 3 
       ,L_EYE_COLOR = 4 
       ,L_GENDER = 5 
       ,L_HAIR_COLOR = 6 
       ,L_STATE_PROVINCE = 7 
       ,L_STATUS = 8 
       ,L_TITLE = 9 
       ,M_TOWER = 10 
       ,L_CITY = 11 
       ,L_REGISTER_TYPE = 12 
      } 
} 

class b 
{ 
    a.TableName x; //trying to restrict this 
    ds.Tables[a.TableName.L_GUEST_TYPE] //accessible and can be used like this 
} 

이것은 내 열거 형입니다. 이제는이 열거 형의 인스턴스를 만들지 않아서 누구도 읽기 전용이 아닌 다른 용도로 사용할 수 없습니다.

이 열거 형을 외부 클래스에서도 액세스 할 수 있도록하려면 일부 외부 클래스가 해당 개체도 만들 수 있다는 것을 공개해야합니다.

그래서 인스턴스 생성을 제한하려면 어떻게해야합니까?

+0

열거 형 인스턴스를 만드는 방법을 보여줄 수 있습니까? – tafa

+0

왜 이것을 제한 하시겠습니까? –

+0

열거 형 인스턴스를 가질 수 없으며 값 유형입니다. –

답변

1

열거 형은 값 유형입니다. 객체/인스턴스를 만들 수 없습니다.

정의에 따라 열거 형은 읽기 전용입니다. 정의 된 enum 값은 수정할 수 없으며 사용하면됩니다.

당신은 access modifiers를 사용하여 가시성을 제한 할 수 있습니다 - 당신은 당신의 클래스에 개인 열거 할 수 있습니다

class b 
{ 
    private enum TableName : byte 
    { 
     L_GUEST_TYPE = 0 
     ,L_AGE_GROUP = 1 
     ,M_COMPANY = 2 
     ,L_COUNTRY = 3 
     ,L_EYE_COLOR = 4 
     ,L_GENDER = 5 
     ,L_HAIR_COLOR = 6 
     ,L_STATE_PROVINCE = 7 
     ,L_STATUS = 8 
     ,L_TITLE = 9 
     ,M_TOWER = 10 
     ,L_CITY = 11 
     ,L_REGISTER_TYPE = 12 
    } 

    public void myMethod(DataSet ds) 
    { 
     ds.Tables[TableName.L_GUEST_TYPE] //accessible and can be used like this 
    } 
} 
+0

실수로 잘못 입력했습니다. 인스턴스를 의미합니다 –

+0

@ Shantanu 굽타 - 값 유형을 인스턴스화 할 수 없습니다. 그것들은 사물이 아닙니다. int를 인스턴스화하는 것과 같습니다. – Oded

+0

sry하지만 나는 "a.TableName x;"을 모른다. 단계가 호출됩니다. 나는 그것이 선언이라고 생각한다. 나는 이것을 제한하고 싶다. –

1

아마 이런 짓을 할 것이다 :

public class Table 
{ 
    public static readonly Company = new Table("T_Company"); 
    public static readonly Title = new Table("T_Title"); 
    public static readonly City = new Table("T_City"); 

    private string name; 

    public string Name { get { return name; } } 

    private Table(string name) 
    { 
    this.name = name; 
    } 
} 

class b 
{ 
    // ... 

    // use it like this: 
    ds.Tables[Table.Company.Name]; 
} 

이 유사하다 " enum 패턴 ". 열거 형처럼 사용할 수있는 클래스를 작성합니다.

이름뿐만 아니라 Table 클래스에도 다른 속성을 추가 할 수 있습니다. 모든 테이블을 생성자의 목록에 넣고 모든 테이블에 액세스 할 수있는 정적 속성을 제공 할 수도 있습니다.

마지막으로, 애플리케이션 (예 : 모듈)에 다른 영역이있는 경우이 영역에서만 볼 수있는 테이블을 추가하기 위해 각 영역에서 표 클래스를 파생시킬 수 있습니다.

+0

동일한 기능을 찾고있었습니다. 그러나 클래스를 만드는 것을 피하려고했습니다. –

+0

더 큰 영역에서 더 쉽게 생활하기 때문에 이점을 얻으면 클래스를 만드는 것이 문제가되지 않습니다. –

관련 문제