1

我对 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 的错误,这也是可以理解的。但是,我可以在该代码行中放入任何引用类型,并且它可以毫无问题地编译。

谁能解释为什么会发生这种情况,或者更可能是为什么我的大脑很愚蠢!

4

1 回答 1

2

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

Option Strict On

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

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

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

于 2013-10-10T12:00:54.870 回答