6

重複の可能性:
C#: インターフェイス - 暗黙的および明示的な実装
暗黙的なインターフェイスと明示的なインターフェイスの実装

こんにちは

暗黙的インターフェースと明示的インターフェースの違いを説明できる人はいますか?

ありがとう!

4

4 に答える 4

9

インターフェイスを明示的に実装すると、そのインターフェイスのメソッドは、オブジェクトがインターフェイスとして参照されている場合にのみ表示されます。

public interface IFoo
{
   void Bar();
}

public interface IWhatever
{
   void Method();
}

public class MyClass : IFoo, IWhatever
{
   public void IFoo.Bar() //Explicit implementation
   {

   }

   public void Method() //standard implementation
   {

   }
}

コードのどこかにこのオブジェクトへの参照がある場合:

MyClass mc = new MyClass();
mc.Bar(); //will not compile

IFoo mc = new MyClass();
mc.Bar(); //will compile

標準の実装では、オブジェクトをどのように参照するかは問題ではありません。

MyClass mc = new MyClass();
mc.Method(); //compiles just fine
于 2011-05-26T13:59:22.100 に答える
3

暗黙的なインターフェイスの実装は、インターフェイスの同じシグネチャを持つメソッドを持つ場所です。

明示的なインターフェイスの実装では、メソッドが属するインターフェイスを明示的に宣言します。

interface I1
{
    void implicitExample();
}

interface I2
{
    void explicitExample();
}


class C : I1, I2
{
    void implicitExample()
    {
        Console.WriteLine("I1.implicitExample()");
    }


    void I2.explicitExample()
    {
        Console.WriteLine("I2.explicitExample()");
    }
}

MSDN:暗黙的および明示的なインターフェイスの実装

于 2011-05-26T14:00:08.813 に答える
2

明示的とは単にインターフェイスを指定することを意味し、暗黙的とは指定しないことを意味します。

例えば:

interface A
{
  void A();
}

interface B
{
  void A();
}

class Imp : A
{
    public void A() // Implicit interface implementation
    {

    }
}

class Imp2 : A, B
{
    public void A.A() // Explicit interface implementation
    {

    }

    public void B.A() // Explicit interface implementation
    {

    }
}
于 2011-05-26T13:57:44.403 に答える
1

また、明示的な実装が存在する理由を知りたい場合は、複数のインターフェイスから同じメソッド(名前と署名)を実装できるためです。次に、異なる機能が必要な場合、またはリターンタイプだけが異なる場合、単純なオーバーロードではこれを実現できません。次に、明示的な実装を使用する必要があります。1つの例は、とをList<T>実装IEnumerableIEnumerable<T>、両方ともGetEnumerator()異なる戻り値を持っていることです。

于 2011-05-26T14:04:42.570 に答える