tQu*_*lla 1 c# vb.net compiler-errors
比较这个C#(小提琴)
public class Program
{
public static void Main()
{
IFoo test;
test = new Impl();
test = new NoImpl();
}
}
public interface IFoo {}
public class NoImpl {}
public class Impl : IFoo {}
Run Code Online (Sandbox Code Playgroud)
到这个VB(小提琴).
Public Module Module1
Public Sub Main()
Dim test as IFoo
test = new Impl()
test = new NoImpl()
End Sub
End Module
Public Interface IFoo
End Interface
Public Class NoImpl
End Class
Public Class Impl
Implements IFoo
End Class
Run Code Online (Sandbox Code Playgroud)
在C#中,编译器将NoImpl的隐式转换调用为错误.在VB中,代码编译但在运行时失败.
这两种语言/编译器之间有什么具体区别?
从这个页面关于Option Strict:
默认情况下,Visual Basic .NET或Visual Basic编译器不强制执行严格的数据类型....在Visual Basic .NET中,通常可以隐式地将任何数据类型转换为任何其他数据类型.
所以这里发生的事情是VB编译器的"松散"特性让事情在运行时失败.C#在类型转换方面并没有那么宽松,这就是为什么它总是给出编译器错误,而VB则不然.使用Option Strict帮助在编译时而不是运行时识别这些错误.
如果不使用Option Strict,VB将允许任何转换/强制转换没有任何打嗝,但缩小转换,精度损失转换和完全无效转换会产生运行时错误.顶部发布的链接包含有关哪种类型转换被视为扩展的信息.