什么是"从任何类型S到任何接口类型T,只要S没有密封并且S没有实现T".实际上意味着
我在C#语言规范中遇到过这个问题:
6.2.4显式引用转换
显式引用转换是:
- ...
- 从任何类型S到任何接口类型T,如果S未密封且提供S未实现T.
我能理解"提供S未密封"的含义,但我不确定我是否理解"提供S不实施T"的意思.
例如:
class S {}//not sealed, nor does it implement T
interface T {}
...
T t = (T)new S();//will throw InvalidCastException.
Run Code Online (Sandbox Code Playgroud)
难道它只是在规范中枚举表达显式引用转换的所有语法正确的方式,无论它是否会抛出异常?或者它是否意味着其他一些我不知道的事情(截至目前)?
提前致谢.
双关语处于"未密封"部分:
class S {} //not sealed, nor does it implement T
interface T {}
class S2 : S, T { }
S s = new S2(); // S reference to an S2 instance, implicit conversion
T t = (T)s; // OK, s refers to an S2 instance that does implement T
Run Code Online (Sandbox Code Playgroud)
可能只是在规范中列举了表达显式引用转换的所有语法正确方法,...
是的,编译器必须允许它,除非它知道转换是不可能的.
如果你看一下T t = (T)s;
,如果S被密封,那么编译器可以肯定地知道转换是不可能的.但是S
如果没有密封,则必须消除s
引用S2
类型的可能性,这是不实际/可能的(S2可能在另一个程序集中).