代码之家  ›  专栏  ›  技术社区  ›  user4951

为什么基类必须有默认的new?

  •  -3
  • user4951  · 技术社区  · 9 年前

    我犯了这个错误

    https://docs.microsoft.com/en-us/dotnet/visual-basic/misc/bc30387

    如果我不想在基类和派生类中都调用无参数的new呢?

    如果我不使用继承,我可以做到这一点。为什么使用继承意味着我不能再这样做?

    解释是什么?所以不是每个类都需要无参数的new,但具有继承的类必须?这没有道理。

    如果我从不使用无参数构造函数调用派生类呢。我不希望在没有参数的情况下构造类。

    例如,我想创建一个没有无参数构造函数的类。我可以做得很好。

    但是我想把全班分成两半。父类和子类。我希望两者都不要有无参数构造函数。

    1 回复  |  直到 9 年前
        1
  •  1
  •   fofik    9 年前

    该链接表示,如果在基类中有一个带参数的显式构造函数,并且没有无参数构造函数,那么就不能让派生类没有构造函数。因为VB。NET无法为派生类创建隐式构造函数。

    如果您没有为这两个函数编写任何构造函数,那么它是完全有效的。

    public class Base
    
    End Class
    
    Public Class Derived 
        Inherits Base
    
    End Class
    

    public class Base
        Public sub New(ByVal Item As Integer)
    
        End Sub
    End Class
    
    Public Class Derived 
        Inherits Base
    
    End Class
    

    为了克服这个问题,您可以在派生类上声明一个默认构造函数,该派生类使用默认值调用基类构造函数。

    public class Base
        Public sub New(ByVal Item As Integer)
    
        End Sub
    End Class
    
    Public Class Derived 
        Inherits Base
    
        Public Sub New()
            MyBase.New(5)
    
        End Sub
    End Class