Я создал перечисление, где я сохранил некоторые имена таблиц. Я хочу, чтобы это использовалось для получения названия таблицы как 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
}
Это - мое перечисление. Теперь я не создал экземпляра этого перечисления так, чтобы никто не мог использовать его для кроме цели только для чтения.
Чтобы это перечисление было доступно во внешних классах также, я должен сделать его общественностью, что означает, что некоторый внешний класс может создать свой объект также.
Таким образом, что я могу сделать, чтобы ограничить его создание экземпляра.
Перечисления - это типы значений. Вы не можете создавать из них объекты / экземпляры.
По определению, перечисления доступны только для чтения . Вы не можете изменять определенные значения перечисления, только используйте их.
Вы можете ограничить видимость, используя модификаторы доступа - вы можете сделать перечисление приватным для вашего класса:
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
}
}
Я бы, наверное, сделал что-то вроде этого:
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 другие свойства, а не только Name. Вы также можете поместить все таблицы в список (в конструкторе) и предоставить статическое свойство для доступа ко всем таблицам.
И последнее, но не менее важное: если у вас есть разные области в ваших приложениях (например, модули), вы можете унаследовать класс Table в каждой области, чтобы добавить дополнительные таблицы, которые видны только в этой области.