2013-10-10 47 views
1

我有一个奇怪的(在我的眼睛)问题与表单和它的基本窗体的构造函数。当我尝试编译时,我期望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)例如,我得到一个有关从字符串转换为整数,可以理解的错误。不过,我可以将任何引用类型放入该代码行,并且编译没有问题。

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

回答

2

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

Option Strict On 

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

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

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

+0

这总是让我崩溃。代码像圣诞树一样点亮:D – WozzeC

+0

这个项目显然从来没有这个选项(不像我们大多数的项目),不用说改变项目到'Strict On'打破了错误的数量,花了近3分钟清除所有的错误,当我把它关掉了!想想我只会在我的新课程中指定它!非常感谢答案。 – XN16

相关问题