我知道C#不支持静态方法继承.我还阅读了许多讨论(包括此处),其中开发人员声称需要此功能,典型的响应是"如果您需要静态成员继承,那么您的设计就存在缺陷".
好吧,鉴于OOP不希望我甚至考虑静态继承,我必须得出结论,我对它的明显需求指出了我的设计中的错误.但是,我被困住了.我真的很感激帮助解决这个问题.这是挑战......
我想创建一个抽象基类(我们称之为Fruit),它封装了一些复杂的初始化代码.此代码不能放在构造函数中,因为其中一些代码将依赖于虚方法调用.
Fruit将由其他具体类(Apple,Orange)继承,每个类必须公开标准工厂方法CreateInstance()以创建和初始化实例.
如果静态成员继承是可行的,我会将工厂方法放在基类中,并使用对派生类的虚方法调用来获取必须从中初始化具体实例的类型.客户端代码可以简单地调用Apple.CreateInstance()来获取完全初始化的Apple实例.
但显然这是不可能的,所以有人可以解释我的设计需要如何改变以适应相同的功能.
遍布整个地方需要包含实用程序方法的类.所以,我想把它变成一个静态类.
为什么静态转换为NotInheritable?
public static class MyClass
{
public static string MyProperty { get; set; }
public static void MyMethod()
{
}
}
Run Code Online (Sandbox Code Playgroud)
至
Public NotInheritable Class Employee
Private Sub New()
End Sub
Public Shared Property MyProperty() As String
Get
Return m_MyProperty
End Get
Set
m_MyProperty = Value
End Set
End Property
Private Shared m_MyProperty As String
Public Shared Sub MyMethod()
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
在我看来,这看起来更像是一个密封的类,不是吗?