man*_*llt 11 .net vb.net constructor class
我是开发人员,没有VB.NET的经验.
场景:
Namespace Presenters
Public Class BaseFooPresenter
' assuming the public default parameterless constructor
Public Sub New(ByVal strvar As String)
' TODO with strvar variabile
End Sub
End Class
Public Class FooPresenter
Inherits BaseFooPresenter
Public Sub New(ByVal boolvar As Boolean)
' TODO with boolvar variabile
End Sub
Public Sub New(ByVal boolvar As Boolean, _
ByVal objvar As Object)
MyBase.New(String.Empty)
Me.New(true)
' TODO with objvar variabile
End Sub
End Class
End Namespace
Run Code Online (Sandbox Code Playgroud)
在第二个FooPresenter构造函数的代码我得到一个错误
"构造函数调用仅在实例构造函数的第一个语句中有效."
在:
Me.New(true)
Run Code Online (Sandbox Code Playgroud)
如果我颠倒了订单,我会收到错误:
MyBase.New(String.Empty)
Run Code Online (Sandbox Code Playgroud)
我可以创建一个方法SetValues(... parameters ...)并从两个构造函数中调用它,但有人知道一个解决方法以避免此错误吗?为什么编译器不会验证在重载之前调用基本构造函数的可能性构造函数?
有人知道如何在逻辑上证明不可能同时从一个类级构造函数调用基类构造函数和另一个类级构造函数吗?
M.A*_*nin 17
问题是,一旦指定了参数化构造函数,无参数构造函数就会变为私有,除非您另行明确指定.
所以,修改ken2K的代码:
Namespace Presenters
Public Class BaseFooPresenter
' SPECIFYING the protected default parameterless constructor
' can also be public
Protected Sub New()
End Sub
Public Sub New(ByVal strvar As String)
' TODO with strvar variabile
End Sub
End Class
Public Class FooPresenter
Inherits BaseFooPresenter
Public Sub New(ByVal boolvar As Boolean)
MyBase.New()
' TODO with boolvar variabile
End Sub
Public Sub New(ByVal boolvar As Boolean, _
ByVal objvar As Object)
Me.New(boolvar)
' TODO with objvar variabile
End Sub
End Class
End Namespace
Run Code Online (Sandbox Code Playgroud)
就像 with 一样C#,您不能同时调用this()和base()。这是你应该做的:
Namespace Presenters
Public Class BaseFooPresenter
' assuming the public default parameterless constructor
Public Sub New(ByVal strvar As String)
' TODO with strvar variabile
End Sub
End Class
Public Class FooPresenter
Inherits BaseFooPresenter
Public Sub New(ByVal boolvar As Boolean)
MyBase.New(String.Empty)
' TODO with boolvar variabile
End Sub
Public Sub New(ByVal boolvar As Boolean, _
ByVal objvar As Object)
Me.New(boolvar)
' TODO with objvar variabile
End Sub
End Class
End Namespace
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21168 次 |
| 最近记录: |