C#是否为未使用的模板参数生成具体实现?

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类层次结构的方法.)

das*_*ght 5

具有不同类型参数的泛型类的两个实例将产生两个独立的类,每个类具有其自己的一组静态变量.因此,答案是肯定的,静态变量Base<ClassA>.MyStaticListBase<ClassB>.MyStaticList将独立.

如果您希望相反的行为(即所有泛型类共享相同的静态变量)将变量声明移动到非泛型类中,并使其成为泛型的基类,如下所示:

public class BaseOfGeneric {
    protected static List<string> MyStaticList;
}
abstract class Base<TSub> : BaseOfGeneric 
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,无论类型参数如何,所有实例都Base<T>将共享相同的内容MyStaticList.