在转换为错误类型时没有编译时错误

时间:2014-01-24 04:02:26

标签: c#

我的问题是关于不同界面中的类型转换

假设我有一个界面

public interface I
{
    void method();
}

实施它的类

public class C : I
{
    public void method()
    {
    }
}

我有另一个界面

public interface I1
{
    void method1();
}

现在,如果我做这样的事情

C c1 = new C();
((I1)c1).method1();

它抛出运行时异常而不是编译时错误

1 个答案:

答案 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'"