2013-07-10 151 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> 
{ 

}