2013-07-10 5 views
1

У меня есть общий класс, и я получу около 20 различных классов, каждый из которых имеет отдельный тип данных для общей части. Класс Generic будет иметь статическое поле ConfigField, которое идентифицирует поле в файле конфигурации. Я хочу рассчитать это поле, используя комбинацию имени производного класса плюс имя общего типа данных, который он обертывает. Так, например:Получение имени класса универсального класса в статической переменной

class BaseClass<T> 
{ 
    static string ConfigField = string.format("{0}.{1}", ???, ???); 
} 
class DerivedInt: BaseClass<int>{} 
class DerivedLong: BaseClass<long>{} 
class DerivedString: BaseClass<string>{} 
... 
Console.WriteLn(DerivedString.ConfigField); 

В результате результат «DerivedString.string» должен быть результатом. Или это невозможно, так как это статическое поле, поэтому оно существует только в базовом базовом классе? Если да, то любые другие решения?

+0

ли вам нужно ConfigField быть 'static'? –

+0

Да. Это глобальное поле, используемое всеми производными объектами, поэтому назначается только один раз. –

ответ

2

Попробуйте:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Derived d = new Derived(); 

     Console.WriteLine(d.ConfigField); // Derived.String 

     Console.ReadLine(); 
    } 
} 

abstract class Base<T> 
{ 
    public string ConfigField { get; private set; } 

    public Base() 
    { 
     ConfigField = string.Format("{0}.{1}", this.GetType().Name, this.GetType().BaseType.GenericTypeArguments[0].Name); 
    } 

} 

class Derived : Base<string> 
{ 

} 
Смежные вопросы