我对 Form 有一个奇怪的(在我看来)问题,它是 Form 的基本构造函数。当我尝试编译时,我预计 Visual Studio 会出现错误,但一切都会成功,并且只有在创建表单时才会在运行时发生错误。
我有一个带有以下构造函数的基本表单:
Public Sub New()
'SNIP
End Sub
Public Sub New(ByVal businessObjectID As Integer)
'SNIP
End Sub
Public Sub New(ByVal viewModel As BaseModel, ByVal childForm As Boolean)
'SNIP
End Sub
Public Sub New(ByVal unitOfWork As IUnitOfWork)
'SNIP
End Sub
我有一个继承自上述基本表单的表单,其构造函数是:
Public Sub New(ByVal viewModel As BaseModel, ByVal parentTaskModel As TaskModel)
MyBase.New(viewModel)
InitializeComponent()
'SNIP
End Sub
问题是,当创建派生表单时,我收到一条错误消息,指出它无法将类型 BaseModel 转换为 IUnitOfWork。现在我完全理解了这一点,这是意料之中的。MyBase.New(viewModel)
但是,由于类型不匹配,我希望 Visual Studio 在我的代码中编写该行时会给我一个错误。
MyBase.New(string.Empty)
例如,如果我写,我会收到一个关于从 String 转换为 Int 的错误,这也是可以理解的。但是,我可以在该代码行中放入任何引用类型,并且它可以毫无问题地编译。
谁能解释为什么会发生这种情况,或者更可能是为什么我的大脑很愚蠢!