B3r*_*ret 2 c# generics inheritance static
如果我有
abstract class Base<TSub>
{
protected static List<TSub> MyStaticList;
}
class DerivedA : Base<DerivedA>
{
}
class DerivedB : Base<DerivedB>
{
}
Run Code Online (Sandbox Code Playgroud)
我得到两个独立的MyStaticList变量,每个基类一个.如果相反,基地看起来像这样
class Base<TSub>
{
protected static List<string> MyStaticList;
}
Run Code Online (Sandbox Code Playgroud)
即,模板参数没有使用,我保证仍然得到两个独立的MyStaticList变量?
(我需要这个用于availableValues()
自定义类Enum类层次结构的方法.)
具有不同类型参数的泛型类的两个实例将产生两个独立的类,每个类具有其自己的一组静态变量.因此,答案是肯定的,静态变量Base<ClassA>.MyStaticList
和Base<ClassB>.MyStaticList
将独立.
如果您希望相反的行为(即所有泛型类共享相同的静态变量)将变量声明移动到非泛型类中,并使其成为泛型的基类,如下所示:
public class BaseOfGeneric {
protected static List<string> MyStaticList;
}
abstract class Base<TSub> : BaseOfGeneric
{
...
}
Run Code Online (Sandbox Code Playgroud)
现在,无论类型参数如何,所有实例都Base<T>
将共享相同的内容MyStaticList
.