可以调用接口隐式方法而不是显式方法吗? (采访任务!)

时间:2012-01-12 16:06:28

标签: c#

(面试问题) 你能给我一个在类中实现的接口的例子,你可以在其中调用它的隐式方法而不是显式方法吗?

2 个答案:

答案 0 :(得分:2)

interface IA
{
    void Method1();
    void Method2();
    void Method3();
}

class A : IA
{
    // Implicit implementation
    public void Method1()
    {
    }

    // Explicit implementation
    void IA.Method2()
    {
    }

    // Implicit + explicit implementation!
    public void Method3()
    {
    }

    void IA.Method3()
    {
    }
}

class TestImplicitExplicit
{
    public void Test( )
    {
        A a = new A();
        a.Method1(); // ok
        //a.Method2(); // does not compile
        a.Method3(); // ok

        IA ia = a;
        ia.Method1(); // ok
        ia.Method2(); // ok
        ia.Method3(); // ok (calls another method than a.Method3(); !)
    }
}

只能通过界面看到显式实现。

答案 1 :(得分:0)

示例:

装配1:

internal interface IFlyable 
{
    void Fly();
}

public class Bird: IFlyable 
{
    public void Fly() { ... }
    void IFlyable.Fly() { ... }
}

大会2:

Bird bird = new Bird();
bird.Fly();
((IFlyable)bird).Fly() // Error, IFlyable is internal

这是一个面试问题。如果你考虑它就会很聪明。