2012-01-12 17 views
0

(インタビュー質問) 明示的なメソッドではなく暗黙のメソッドを呼び出すことができるクラスで実装されたインターフェイスの例を教えてください。インタフェース暗黙メソッドを呼び出すことはできますが、明示メソッドを呼び出すことはできませんか? (インタビュークエスト!on)

+0

明示的にオーバーライドするインターフェイスメソッドを呼び出せないクラスを指していますか? – rerun

+0

インターフェイスを実装したクラスの暗黙的および明示的メソッドとはどういう意味ですか?公的、私的のようなアクセス修飾子を意味しますか? – Mharlin

+0

@rerun正しい。 – Idrees

答えて

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 

それは面接の質問でした。あなたがそれについて考えるなら、スマートなもの。

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(); !) 
    } 
} 

明示的な実装は、インターフェイスを介してのみ表示されます。

+0

iaまたはIAを宣言したときでもMethod2を呼び出すことができました。だからそれは可能ですか?あなたはこれをすることができない状況を考えることができますか? – Idrees

+0

それは常に動作するはずです。奇妙なことに、同じメソッドを明示的かつ暗黙的に同時に実装することさえできます! –

+0

必ずしもそうではありません... – Idrees

関連する問題