如果我们将一些空变量投入到类型中,我希望编译器会抛出一些例外,但事实并非如此。为什么?
我的意思是
string sample1 = null as string;
string sample2 = (string)null;
object t1 = null;
TestClass t2 = (TestClass)t1;
也许在第一个中,as
操作员处理异常处理。但是其他例子必须引发例外。编译器如何处理这些情况?也许由于变量为null,因此不会执行铸造操作?因为如果确实施放了一个空指针,则必须是错误。
根据文档(明确的转换),您可以从基本类型施放到派生类型。
由于null
是所有参考类型的有效值,只要存在铸件路由,您就应该可以。
object
null→ TestClass
null的作用为object
是所有参考类型的超类。
但是,如果尝试string
null→TestClass
NULL(假设TestClass
不是string
的子类型),则您会发现汇编错误,因为TestClass
不是string
的派生类型。