2010-05-12 49 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 2010-05-12 09:11:10

+0

你爲什麼要限制這個? – 2010-05-12 09:20:18

+0

你不能擁有一個枚舉的實例,它是一個值類型。 – 2010-05-13 05:03:17

回答

1

枚舉值類型。你不能從它們創建對象/實例。

根據定義,枚舉是只讀。你不能修改定義的枚舉值,只能使用它們。

您可以通過使用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

sry for mistyping。我的意思是實例 – 2010-05-12 09:06:20

+0

@Shantanu Gupta - 你不能實例化值類型。它們不是物體。這就像試圖實例化一個int。 – Oded 2010-05-12 09:08:13

+0

sry但我不知道什麼「a.TableName x」步驟將被調用。我認爲這是宣言。我想限制這一點。 – 2010-05-12 09:10:11

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]; 
} 

這是類似於「枚舉模式「。你寫了一個可以像枚舉一樣使用的類。

您可以將其他屬性添加到Table類中,而不僅僅是名稱。您也可以將所有表放入列表中(在構造函數中),並提供一個靜態屬性來訪問所有表。最後但並非最不重要,如果您的應用程序中有不同的區域(例如模塊),則可以在每個區域中派生Table類,以添加僅對此區域可見的其他表。

+0

我正在尋找相同的功能。但是試圖避免創建類 – 2010-05-12 09:19:17

+0

如果你從中受益,因爲它可以讓你的生活在更大的區域更輕鬆,創建一個班級不是問題。 – 2010-05-12 10:24:38

相關問題