gpt4 book ai didi

VB.NET:返回不是函数返回类型实例的对象时没有警告

转载 作者:行者123 更新时间:2023-12-01 00:53:59 24 4
gpt4 key购买 nike

我们有这个:

Friend NotInheritable Class ConcreteGraphFactory
Inherits AbstractGraphFactory

Public Shared ReadOnly Instance As New ConcreteGraphFactory()

Private Sub New()
MyBase.New()
End Sub

Friend Overrides Function Create() As AbstractGraph
Return New ConcreteGraph()
End Function

Private NotInheritable Class ConcreteGraph
Inherits AbstractGraph

Private ReadOnly Question1 As New Question("Why isn't this showing a warning?")

Public Overrides Function GetRoot() As IRoot
Return Question1 '<---HERE
End Function

Public Sub New()
End Sub

End Class

End Class

我有 IRoot :
Friend Interface IRoot
Inherits IQuestion
Function GetContainer() As AbstractGraph
End Interface

最后 Question :
Public Class Question 
Implements IQuestion

' code....

End Class

为什么VS不会显示警告? Question未实现 IRoot ...

最佳答案

如果您希望编译器在那里给出错误,那么您需要将 Option strict 设置为 On。您可以在项目属性的编译选项卡上执行此操作。或添加 Option Strict On到包含此代码的文件的顶部。

以下是一些页面,其中包含有关 Option Strict 含义的更多详细信息。

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

https://msdn.microsoft.com/en-us/library/zcd4xwzs.aspx

Option Strict Off 意味着 Visual Basic 编译器不强制执行严格的数据类型。如果无法完成,它将尝试进行隐式类型转换并抛出运行时错误。

我不认为它与 IRoot 有任何关系作为一个界面,但在尝试后它看起来确实如此。如果 GetRoot返回一个类 Question没有继承,那么即使关闭 Option Strict 也会出现编译器错误。

在关闭 Option Strict 的情况下运行实际上使一些事情变得更容易,尤其是在处理后期绑定(bind)的 COM 对象时。在大多数情况下,您在编写代码时不必担心类型转换。

然而,这也是很多人不喜欢 VB.NET 的原因之一。就个人而言,我在使用它时喜欢它,但是现在已经足够长了,编译器不会为您进行所有严格的类型检查似乎很奇怪。我总能知道何时通过 C# 的转换工具生成了一些 VB 代码,因为它会有一堆 DirectCast在 VB 开发人员编写的代码中看不到的调用。

当 C# 出现 dynamic在 2009 年的关键词中,VB.NET 开发人员在想,“嗯。我们一直能够编写代码而不用担心类型。”当然,VB.NET 与 dynamic 不同。在 C# 中,但许多早期的动态代码示例显示了您在 VB 中已经可以在关闭选项严格的情况下执行的操作。

关于VB.NET:返回不是函数返回类型实例的对象时没有警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29480639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com