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

本文关键字:继承 警告 声明 静态成员 为什么 | 更新日期: 2023-09-27 18:13:34

考虑以下类:

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

这将抛出一个警告:

' C。隐藏继承的成员b。如果要隐藏,请使用new关键字。

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

public static new A StaticA { get; set; }

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

然而,警告确实说了"inherited member",所以这些静态属性实际上似乎是继承的。

为什么会这样?静态继承不违反OOP原则吗?

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

只是在警告中用词不当。该属性实际上是不可继承的,但它是隐藏的,因为可以使用继承类的名称访问基属性。

也许一个更好的警告是

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

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