2011-08-25 3 views
1

У меня есть проблема в C# с общим классом:Как инициализировать статический атрибут в родовом классе?

class Hop<T> 
{ 
    static string x; 
} 

Могу ли я инициализировать x для всех экземпляра Hop?

Нечто вроде Hop.x = "test"; не работает, например.

+0

х является частным, обнародует его – 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

Я думаю, что это хорошо для моих нужд, «х» должно быть одинаковым для всех хопов . Спасибо – Orpheo

0

Если вам нужно время компиляции инициализации, вы можете написать:

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

Для более сложной инициализации, вы можете использовать класс инициализатору:

class Hop<T> 
{ 
    static string x; 

    static Hop() 
    { 
     x = "Foo"; 
    } 
} 
Смежные вопросы