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中!