【问题标题】:Why does this warning state that static members are being "inherited"? [duplicate]为什么这个警告声明静态成员正在被“继承”? [复制]
【发布时间】:2015-12-15 15:09:03
【问题描述】:

考虑以下类:

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; }

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

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

这是为什么?静态继承不是违背 OOP 原则吗?

【问题讨论】:

  • 我不认为这是重复的。也许我应该重新表述我的问题,但我在问为什么警告使用 inherited member 这个词,而事实上,静态成员没有被继承,从子类访问它们只是语法糖。跨度>

标签: c# .net oop inheritance static


【解决方案1】:

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

也许更好的警告是

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    相关资源
    最近更新 更多