【问题标题】:Expected constructor error only occurs at runtime预期的构造函数错误仅在运行时发生
【发布时间】:2013-10-10 09:36:57
【问题描述】:

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

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

【问题讨论】:

    标签: .net vb.net winforms inheritance


    【解决方案1】:

    你应该在文件的开头使用

    Option Strict On
    

    那么你会得到一个隐式转换的错误。

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

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

    【讨论】:

    • 这总是让我崩溃。代码像圣诞树一样亮起来:D
    • 这个项目显然从来没有这个选项(不像我们的大多数项目),不用说将项目更改为Strict On打破了错误的数量,花了将近3分钟来清除所有错误当我再次将其设置为关闭时!认为我只会在我的新课程中指定它!非常感谢您的回答。
    猜你喜欢
    • 2015-12-18
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多