我的问题是关于不同界面中的类型转换
假设我有一个界面
public interface I
{
void method();
}
Run Code Online (Sandbox Code Playgroud)
实现它的类
public class C : I
{
public void method()
{
}
}
Run Code Online (Sandbox Code Playgroud)
我有另一个界面
public interface I1
{
void method1();
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我做这样的事情
C c1 = new C();
((I1)c1).method1();
Run Code Online (Sandbox Code Playgroud)
它抛出运行时异常而不是编译时错误
Sco*_*ain 12
因为C没有标记sealed我可能会这样做
public D : C, I1
{
public void method1()
{
}
}
Run Code Online (Sandbox Code Playgroud)
这将使以下代码完全合法.
C c1 = new D();
((I1)c1).method1();
Run Code Online (Sandbox Code Playgroud)
如果C被标记sealed,则应该得到编译时错误,因为不存在可以实现接口的更多派生类.
public sealed class C : I
{
public void method()
{
}
}
//You should now get the compile time error "Cannot convert type 'SandboxConsole.C' to 'SandboxConsole.I1'"
Run Code Online (Sandbox Code Playgroud)