2011-08-25 9 views
1

私は、ジェネリッククラスとC#で問題をしました:ジェネリッククラスの静的属性を初期化するにはどうすればよいですか?

class Hop<T> 
{ 
    static string x; 
} 

私はHopのすべてのインスタンスに対してxを初期化することはできますか?

たとえば、Hop.x = "test";のようなものは機能しません。

+0

xがプライベートで、 – mtijn

+0

それは公開するIこのようなパターンに対しては強く勧めます。すべての一般的な実装間でデータを共有することは躊躇されます。 – 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"はすべてのホップのために同じでなければならない。ありがとう – Orpheo

0

あなたはコンパイル時に初期化が必要な場合は、あなたが書くことができます。

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

より複雑な初期化のために、あなたはクラス初期化子を使用することができますが:

class Hop<T> 
{ 
    static string x; 

    static Hop() 
    { 
     x = "Foo"; 
    } 
} 
関連する問題