是否有可能创建其实例不能创建但可用于只读目的的枚举
我创建了一个枚举,其中存储了一些表名。我希望它被用来获得像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
}
这是我的枚举。现在我还没有创建这个枚举的任何实例,因此除了只读目的之外,没有人可以使用它。
为了让这个枚举可以在外部类中访问,我必须将它公开,这意味着某些外部类也可以创建它的对象。
那么我能做些什么来限制它的实例创建。
枚举值类型。你不能从它们创建对象/实例。
根据定义,枚举是只读。你不能修改定义的枚举值,只能使用它们。
您可以通过使用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
}
}
sry for mistyping。我的意思是实例 – 2010-05-12 09:06:20
@Shantanu Gupta - 你不能实例化值类型。它们不是物体。这就像试图实例化一个int。 – Oded 2010-05-12 09:08:13
sry但我不知道什么“a.TableName x”步骤将被调用。我认为这是宣言。我想限制这一点。 – 2010-05-12 09:10:11
我可能会做这样的事情:
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类,以添加仅对此区域可见的其他表。
我正在寻找相同的功能。但是试图避免创建类 – 2010-05-12 09:19:17
如果你从中受益,因为它可以让你的生活在更大的区域更轻松,创建一个班级不是问题。 – 2010-05-12 10:24:38
您可以举一个枚举实例如何创建的例子吗? – tafa 2010-05-12 09:11:10
你为什么要限制这个? – 2010-05-12 09:20:18
你不能拥有一个枚举的实例,它是一个值类型。 – 2010-05-13 05:03:17