预期的构造函数错误仅在运行时发生

时间:2013-10-10 09:36:58

标签: .net vb.net winforms inheritance

我对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

我有一个继承自上述基本形式的Form,其构造函数是:

Public Sub New(ByVal viewModel As BaseModel, ByVal parentTaskModel As TaskModel)
     MyBase.New(viewModel)

     InitializeComponent()

     'SNIP

End Sub

问题在于,在创建派生窗体时,我收到一条错误消息,指出它无法将类型BaseModel强制转换为IUnitOfWork。现在我完全理解这一点,这是预期的。但是,我希望Visual Studio在我的代码中编写MyBase.New(viewModel)行时给出错误,因为类型不匹配。

如果我写MyBase.New(string.Empty)例如,我得到一个关于从String转换为Int的错误,这也是可以理解的。但是,我可以在该行代码中放置任何引用类型,并且编译时没有问题。

任何人都可以解释为什么会发生这种情况,或更有可能解释为什么我的大脑变得愚蠢!

1 个答案:

答案 0 :(得分:2)

在文件的开头,您应该使用

Option Strict On

然后你会得到隐式转换的错误。

http://support.microsoft.com/kb/311329/en-us

  

Option Strict语句默认情况下,Visual Basic .NET或   Visual Basic编译器不强制执行严格的数据输入。改变   此默认行为,请参阅更改默认项目值   部分。