【发布时间】: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