2011-08-25 66 views
1

我在C#中的问题与通用类:如何初始化泛型类中的静态属性?

class Hop<T> 
{ 
    static string x; 
} 

我可以初始化xHop所有的实例?

Hop.x = "test";这样的东西不起作用。

+0

x是私有的,让公众 – mtijn

+0

我会强烈推荐这样的模式;在所有通用实现中共享数据令人不敢恭维。 – Tejs

回答

4

问题是,没有Hop类型,有一个Hop<T>泛型类型。如何:

class Hop 
{ 
    static string X; 
} 

class Hop<T> : Hop 
{ 

} 

但你仍然有问题,是这样的:

Hop<string>.X = "hello"; 
string x = Hop<int>.X; // x == "hello". 

静态字段是Hop类型,而不是Hop<T>类型。

+0

我认为这对我的需求很好,“x”必须与所有Hop 相同。感谢:D – Orpheo

0

如果您需要编译时初始化,你可以写:

class Hop<T> 
{ 
    static string x = "Foo"; 
} 

对于更复杂的初始化,您可以使用一个类初始化:

class Hop<T> 
{ 
    static string x; 

    static Hop() 
    { 
     x = "Foo"; 
    } 
}