gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:04:24 24 4
gpt4 key购买 nike

如果我有

abstract class Base<TSub>
{
protected static List<TSub> MyStaticList;
}

class DerivedA : Base<DerivedA>
{
}

class DerivedB : Base<DerivedB>
{

}

我得到两个独立的 MyStaticList 变量,每个基类一个。如果相反,基地看起来像这样

class Base<TSub>
{
protected static List<string> MyStaticList;
}

也就是说,模板参数没有被使用,我能保证仍然得到两个独立的 MyStaticList 变量吗?

(我需要这个用于自定义类枚举类层次结构的 availableValues() 方法。)

最佳答案

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

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

public class BaseOfGeneric {
protected static List<string> MyStaticList;
}
abstract class Base<TSub> : BaseOfGeneric
{
...
}

现在 Base<T> 的所有实例将共享相同的 MyStaticList ,不管它们的类型参数如何。

关于c# - C# 是否为未使用的模板参数生成具体实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13012548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com