Vb.net 受保护的构造函数和MustInherit/Abstract类

Vb.net 受保护的构造函数和MustInherit/Abstract类,vb.net,oop,constructor,abstract-class,protected,Vb.net,Oop,Constructor,Abstract Class,Protected,具有受保护构造函数的类与标记为MustInherit的类之间有什么区别?(我用VB.Net编程,但它可能同样适用于c) 我问这个问题的原因是因为我有一个抽象类,我想将构造函数转换为共享/静态方法。(添加一些约束) 我不能这样做,因为无法在共享函数中创建实例 我想删除MustInherit关键字。这会有什么不同吗 谢谢 预计到达时间: 我想我已经回答了我的问题,如果我删除MustInherit关键字,我就不能再包含MustOverrides了,这非常有用 考虑到这一点,有没有办法解决我的问题 ET

具有受保护构造函数的类与标记为
MustInherit
的类之间有什么区别?(我用VB.Net编程,但它可能同样适用于c)

我问这个问题的原因是因为我有一个抽象类,我想将构造函数转换为共享/静态方法。(添加一些约束)

我不能这样做,因为无法在共享函数中创建实例

我想删除
MustInherit
关键字。这会有什么不同吗

谢谢

预计到达时间:

我想我已经回答了我的问题,如果我删除MustInherit关键字,我就不能再包含MustOverrides了,这非常有用

考虑到这一点,有没有办法解决我的问题

ETA2:

为了澄清,除非删除MustInherit关键字,否则我无法执行以下操作

Public MustInherit MyBaseClass

  Private Sub New() 
  End Sub 

  Protected Function CreateInstance(ParmList) As MyBaseClass
    If ParmList is Ok Then Return New MyBaseClass()
  End Function 

End Class

您可以使用反射调用
Protected
构造函数并实例化该类,但不能以这种方式实例化
abstract
类。您可以在
MustInherit
类中声明
MustOverride
方法,但是
Protected
构造函数不能对派生类强制任何操作


您应该始终将概念上抽象的类声明为
MustInherit
<当您提供代码>受保护的构造函数以及一些公共重载来为派生类提供更多功能时,它可能非常有用。

如果该类只有一个受保护的构造函数,则仍然可以拥有一个可以独立运行的类实例。它需要围绕受保护的构造函数工作,例如使用反射


如果类被标记为MustInherit,则不可能单独拥有该类的实例。只能创建派生/继承类的实例。

不确定您想要什么

如果需要创建抽象类的对象,我建议您创建抽象类的私有类实现,并在CreateInstanceMethod中返回它:

Public MustInherit MyBaseClass
    Private BaseClassImplementation
        Inherits MyBaseClass

        ...
    End Class

    Public Function CreateInstance(paramList) as MyBaseClass
        If paramList Is Ok Then Return New BaseClassImplementation
    End Function
End Class
但是,如果要向构造添加一些约束,我建议抛出异常:

Public MustInherit MyBaseClass
    Protected Sub New(paramList)
        If paramList IsNot Ok Then Thow New Exception
        ...
    End Sub
End Class

你应该指明你在说什么语言。谢谢你,我已经更新了,指明它是vb.net或c#是的,像往常一样,我在发帖后就意识到我需要一个抽象类来包含MustOverride方法。因此,为了澄清,除非我删除MustInherit关键字,否则我不能执行以下操作?Public必须将MyBaseClass Private Sub New()End Sub Protected Function CreateInstance(ParmList)继承为MyBaseClass如果ParmList正常,则返回新的MyBaseClass()End Function End classs这太糟糕了,我已经将上述内容添加到了OP中!