2012-01-12 39 views
0

(面試問題) 你能給我一個在類中實現的接口的例子,你可以在其中調用它的隱式方法,但不是明確的方法嗎?可以調用接口隱式方法,但不能調用顯式方法嗎? (面試任務!)

+0

你的意思是你不能調用顯式重寫接口方法的類嗎? – rerun 2012-01-12 16:08:16

+0

你是什麼意思的類中的隱式和顯式方法實現了接口?你的意思是訪問修飾符像公共和私人? – Mharlin 2012-01-12 16:09:19

+0

@rerun正確。 – Idrees 2012-01-12 16:25:42

回答

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 2012-01-12 16:45:49

+0

它應該始終工作。奇怪的是,你甚至可以同時顯式和隱式地實現相同的方法! – 2012-01-12 16:55:39

+0

並不總是... – Idrees 2012-01-12 17:09:22

相關問題