在C#中,超类的静态成员被"继承"到子类范围中.例如:
class A { public static int M() { return 1; } }
class B : A {}
class C : A { public new static int M() { return 2; } }
[...]
A.M(); //returns 1
B.M(); //returns 1 - this is equivalent to A.M()
C.M(); //returns 2 - this is not equivalent to A.M()
Run Code Online (Sandbox Code Playgroud)
现在,你不能继承静态类,我唯一可以想象静态继承可能重要的地方完全忽略它:尽管你可以创建一个通用约束,它需要一个类型参数T作为子类A,你仍然无法调用T.M()(这可能简化了VM的事情,更不用说M在子类中编写不同的实现并使用它.
因此,静态成员的"继承"仅仅看起来像命名空间污染; 即使你明确限定名称(即B.M)A的版本仍然解决.
编辑与命名空间的比较:
namespace N1{ class X(); }
namespace N1.N2 …Run Code Online (Sandbox Code Playgroud) 我面临着VB.NET和C#(.NET2)中的情况,具有静态/共享成员的可见性.在VB.NET中我觉得有点奇怪:
public class A
{
private static A instance;
public static A Instance
{
get { return instance; }
}
public string Name { get { } }
}
Run Code Online (Sandbox Code Playgroud)
usage:
A.Instance.Name// ONLY名称是"可见的"
VB.NET:
Public Class A
Private Shared _instance As A
Public Shared ReadOnly Property Instance() As A
Get
Return _instance
End Get
End Property
Public ReadOnly Property Name() As String
Get
Return ""
End Get
End Property
End Class
Run Code Online (Sandbox Code Playgroud)
用法:
A.Instance.Instance.Instance.Instance...
Run Code Online (Sandbox Code Playgroud)
//共享成员的行为就像一个公共类,我可以重复它到无限...
这是微软的疏忽还是VB.NET的"功能"?