关于c#:隐含<>

Implicit <> Explicit interface

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicates:
C#: Interfaces - Implicit and Explicit implementation
implicit vs explicit interface implementation

你好

有人能解释一下隐式和显式接口之间的区别吗?

谢谢!


当您明确地实现接口时,只有当对象被引用为接口时,该接口上的方法才可见:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
   {

   }
}

如果代码中的某个地方引用了此对象:

1
2
3
4
5
MyClass mc = new MyClass();
mc.Bar(); //will not compile

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

对于标准实现,无论您如何引用对象:

1
2
MyClass mc = new MyClass();
mc.Method(); //compiles just fine

隐式接口实现是指具有与接口相同签名的方法。

显式接口实现是显式声明方法属于哪个接口的地方。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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:隐式和显式接口实现


显式只是指您指定接口,隐式是指您不指定。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
    {

    }
}


另外,如果您想知道显式实现存在的原因,那是因为您可以从多个接口实现相同的方法(名称和签名);然后,如果您需要不同的功能,或者只是返回类型不同,则不能通过简单的重载来实现这一点。然后您必须使用显式实现。一个例子是,List实现IEnumerableIEnumerable,两者都有GetEnumerator(),但返回值不同。