考虑以下课程:
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原则的静态继承吗?
答案 0 :(得分:0)
在警告中,这只是一个糟糕的词语选择。该属性实际上不是继承的,但它是隐藏,因为您可以使用继承类的名称访问基本属性。
也许更好的警告是
'C.StaticA'隐藏基地成员'B.StaticA'。如果想要隐藏,请使用new关键字。
另一个原因可能是,检测隐藏继承成员的相同静态分析也检测到隐藏静态成员,并且它们只对两者使用相同的消息(不区分静态和非静态成员)