相关疑难解决方法(0)

什么是静态方法继承的正确替代方法?

我知道C#不支持静态方法继承.我还阅读了许多讨论(包括此处),其中开发人员声称需要此功能,典型的响应是"如果您需要静态成员继承,那么您的设计就存在缺陷".

好吧,鉴于OOP不希望我甚至考虑静态继承,我必须得出结论,我对它的明显需求指出了我的设计中的错误.但是,我被困住了.我真的很感激帮助解决这个问题.这是挑战......

我想创建一个抽象基类(我们称之为Fruit),它封装了一些复杂的初始化代码.此代码不能放在构造函数中,因为其中一些代码将依赖于虚方法调用.

Fruit将由其他具体类(Apple,Orange)继承,每个类必须公开标准工厂方法CreateInstance()以创建和初始化实例.

如果静态成员继承是可行的,我会将工厂方法放在基类中,并使用对派生类的虚方法调用来获取必须从中初始化具体实例的类型.客户端代码可以简单地调用Apple.CreateInstance()来获取完全初始化的Apple实例.

但显然这是不可能的,所以有人可以解释我的设计需要如何改变以适应相同的功能.

.net c# inheritance static

79
推荐指数
2
解决办法
4万
查看次数

你可以在VB中继承带参数的子新(构造函数)吗?

在下面的代码中,我收到编译错误

Error Too many arguments to 'Public Sub New()'
Run Code Online (Sandbox Code Playgroud)

在...上Dim TestChild As ChildClass = New ChildClass("c").TestChild.Method1()即使它们都是我继承的基类,我也没有收到它.

Public Class BaseClass
    Public ReadOnly Text As String
    Public Sub New(ByVal SetText As String)
        Text = SetText
    End Sub
    Public Sub New()
        Text = ""
    End Sub
End Class

Public Class ChildClass
    Inherits BaseClass
End Class

Public Class TestClass
    Sub Test()
        Dim TestChild As ChildClass = New ChildClass("c")
        TestChild.Method1()
    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

我可以将子类更改为:

Public Class ChildClass
    Inherits BaseClass
      Public …
Run Code Online (Sandbox Code Playgroud)

vb.net inheritance constructor new-operator

41
推荐指数
2
解决办法
4万
查看次数

标签 统计

inheritance ×2

.net ×1

c# ×1

constructor ×1

new-operator ×1

static ×1

vb.net ×1