我不明白下面的现象,谁能解释一下我哪里错了?
public class BaseClass
{
public BaseClass()
{
BaseClass.Instance = this;
}
public static BaseClass Instance
{
get;
private set;
}
}
public class SubClassA : BaseClass
{
public SubClassA()
: base()
{ }
}
public class SubClassB : BaseClass
{
public SubClassB()
: base()
{ }
}
class Program
{
static void Main(string[] args)
{
SubClassA a = new SubClassA();
SubClassB b = new SubClassB();
Console.WriteLine(SubClassA.Instance.GetType());
Console.WriteLine(SubClassB.Instance.GetType());
Console.Read();
}
}
据我了解,编译器应该通过继承生成一个新类型,SubClassA 和 SubClassB 实际上是具有自己的静态变量的自己的类型。但似乎类的静态部分不是继承的而是引用的 - 我哪里错了?
最佳答案
只有一个静态 Instance
属性,它在 BaseClass
中定义,这也恰好是唯一可以更改它的类型(因为集合是 私有(private)
)。
发生的事情是您的子类 SubClassA
和 SubClassB
每个都在它们自己的构造函数中调用 BaseClass
构造函数。此构造函数将 Instance
设置为正在初始化的 BaseClass
实例。
您的示例代码中的最后一个此类实例恰好是 SubClassB
的实例;因此,当您到达 Console.WriteLine
调用时,one Instance
属性设置为此实例。
您可以反转SubClassA
和SubClassB
对象的构造,您会看到Instance
设置为SubClassA< 的实例
代替。
关于c# - 继承和静态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3776305/