为什么这个警告声明静态成员被“继承”?

时间:2015-09-18 12:50:46

标签: c# .net oop inheritance static

考虑以下课程:

public class A
{
}

public class B
{
     public static A StaticA { get; set; }
}

public class C : B
{
     public static A StaticA { get; set; }
}

这将发出警告:

  

'C.StaticA'隐藏了继承成员'B.StaticA'。如果想要隐藏,请使用new关键字。

我可以通过添加new关键字来消除警告,因为我被告知:

public static new A StaticA { get; set; }

但我为什么要这样?为什么静态成员被继承? 就我而言,静态成员绑定到特定类型,而不是实例。

但是,警告确实说“ 继承的成员 ”,因此这些静态属性似乎实际上是继承的。

这是为什么?不是针对OOP原则的静态继承吗?

1 个答案:

答案 0 :(得分:0)

在警告中,这只是一个糟糕的词语选择。该属性实际上不是继承的,但它是隐藏,因为您可以使用继承类的名称访问基本属性。

也许更好的警告是

  

'C.StaticA'隐藏基地成员'B.StaticA'。如果想要隐藏,请使用new关键字。

另一个原因可能是,检测隐藏继承成员的相同静态分析也检测到隐藏静态成员,并且它们只对两者使用相同的消息(不区分静态和非静态成员)