Задать вопрос
lightman
@lightman

Как реализовать коллекцию констант в C#?

1. Константы будут прописаны в исходном коде и, следовательно, будут известны уже на этапе компиляции.

2. Константы в коллекции должны быть доступны через точку (чтобы работал интеллисенс студии):
myConst.A = "a";
myConst.B = "b";
...
Console.WriteLine(myConst.A); // вывод: a
Console.WriteLine(myConst.B); // вывод: b

3. Коллекция должна наследоваться в возможностью переопределения ключей и/или добавления новых в классах-потомках:

class A  
{  
    myConst.A = "a";  
    myConst.B = "b";  
}  
  
class B : A  
{  
    myConst.A = "a_new";  
    myConst.C = "c_new"  
}  
  
// мне подойдёт доступ хоть через класс,   
// хоть через объект класса, это не важно  
B b = new B();  
Console.WriteLine(b.myConst.A); // вывод: a_new  
Console.WriteLine(b.myConst.B); // вывод: b  
Console.WriteLine(b.myConst.C); // вывод: c_new


4. Крайне желательно чтобы была итерация по значениям констант (на то она и коллекция!):
foreach (var value in myConst)
{
    Console.WriteLine(value);
}
  • Вопрос задан
  • 2726 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Может быть пометить необходимые поля readonly?
Ответ написан
@gleb_kudr
Думаю вот так можно. + Немножко рефлексии. Правда в енум придется включить все возможные варианты включая наследников.
using System.Reflection;
public class ConstCollection:Dictionary<MyConst,string>
{
public string A="a";
public string B="b";

public ConstCollection(){
  foreach (MyConst c in Enum.GetValues(typeof(MyConst))){
    MethodInfo m = this.GetType().GetMethod(c.ToString());
    if(m!=null){
      string cValue=(string)m.Invoke(this, null);
      this.add(c,cValue);
    }
  }
}
}
public enum MyConst{
A,
B,
C
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы