什么是"从任何类型S到任何接口类型T,只要S没有密封并且S没有实现T." 实际上意味着

bli*_*sta 7 c# specifications

什么是"从任何类型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)

难道它只是在规范中枚举表达显式引用转换的所有语法正确的方式,无论它是否会抛出异常?或者它是否意味着其他一些我不知道的事情(截至目前)?

提前致谢.

Hen*_*man 6

双关语处于"未密封"部分:

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可能在另一个程序集中).