c# explixit interface implementation

某个类要实现两个包含相同方法名的接口, 应该如何实现这两个方法?

 1 namespace explicitinterfaceimplementation
 2 {
 3     class program : iprintone,iprinttwo, iprintthree
 4     {
 5         static void main(string[] args)
 6         {
 7             program p = new program();
 8             p.print();
 9             (p as iprinttwo).print();
10             ((iprintthree)p).print();
11         }
12 
13 
14 
15         public void print()
16         {
17             console.writeline("print one interface");
18         }
19         // explicitly implement iprinttwo
20         void iprinttwo.print()
21         {
22             console.writeline("print two interface");
23         }
24         // explicitly implement iprintthree
25         string iprintthree.print()
26         {
27             console.writeline("print two interface");
28             return "asd";
29         }
30     }
31 
32     interface iprintone
33     {
34         void print();
35     }
36 
37     interface iprinttwo
38     {
39         void print();
40     }
41 
42     interface iprintthree
43     {
44         string print();
45     }
46 }

 

以上demo中共有3个拥有相同方法名的interface,program类继承了这三个接口,使用explicit interface implementation实现iprinttwo和iprintthree接口的方法

显示实现的接口方法前不能加access modifier,且调用该方法时需将program类转换位接口才能调用, 不能直接通过类引用调用。

when a class explicitly implements an interface member, the interface member can no longer be accessed thru class reference variable, but only thru the interface reference variable.

以上demo的运行结果:

print one interface  
print two interface  
print three interface