我的问题是关于不同界面中的类型转换
假设我有一个界面
public interface I
{
void method();
}
实施它的类
public class C : I
{
public void method()
{
}
}
我有另一个界面
public interface I1
{
void method1();
}
现在,如果我做这样的事情
C c1 = new C();
((I1)c1).method1();
它抛出运行时异常而不是编译时错误
答案 0 :(得分:12)
由于C
未标记sealed
,我可能会这样做
public D : C, I1
{
public void method1()
{
}
}
这将使以下代码完全合法。
C c1 = new D();
((I1)c1).method1();
如果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'"