🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 显式接口实现(C# 编程指南) 如果[类](https://msdn.microsoft.com/zh-CN/library/0b0thckt.aspx)实现两个接口,并且这两个接口包含具有相同签名的成员,那么在类中实现该成员将导致两个接口都使用该成员作为它们的实现。在下面的示例中,所有对 Paint 调用方法相同。 ``` class Test { static void Main() { SampleClass sc = new SampleClass(); IControl ctrl = (IControl)sc; ISurface srfc = (ISurface)sc; // The following lines all call the same method. sc.Paint(); ctrl.Paint(); srfc.Paint(); } } interface IControl { void Paint(); } interface ISurface { void Paint(); } class SampleClass : IControl, ISurface { // Both ISurface.Paint and IControl.Paint call this method. public void Paint() { Console.WriteLine("Paint method in SampleClass"); } } // Output: // Paint method in SampleClass // Paint method in SampleClass // Paint method in SampleClass ``` 然而,如果两个[接口](https://msdn.microsoft.com/zh-CN/library/87d83y5b.aspx)成员执行不同的函数,那么这可能会导致其中一个接口的实现不正确或两个接口的实现都不正确。可以显式地实现接口成员 -- 即创建一个仅通过该接口调用并且特定于该接口的类成员。这是使用接口名称和一个句点命名该类成员来实现的。例如: ``` public class SampleClass : IControl, ISurface { void IControl.Paint() { System.Console.WriteLine("IControl.Paint"); } void ISurface.Paint() { System.Console.WriteLine("ISurface.Paint"); } } ``` 类成员 **IControl.Paint** 只能通过 **IControl** 接口使用,**ISurface.Paint** 只能通过 **ISurface** 使用。两个方法实现都是分离的,都不可以直接在类中使用。例如: ``` // Call the Paint methods from Main. SampleClass obj = new SampleClass(); //obj.Paint(); // Compiler error. IControl c = (IControl)obj; c.Paint(); // Calls IControl.Paint on SampleClass. ISurface s = (ISurface)obj; s.Paint(); // Calls ISurface.Paint on SampleClass. // Output: // IControl.Paint // ISurface.Paint ``` 显式实现还用于解决两个接口分别声明具有相同名称的不同成员(如属性和方法)的情况: ``` interface ILeft { int P { get;} } interface IRight { int P(); } ``` 为了同时实现两个接口,类必须对属性 P 和/或方法 P 使用显式实现以避免编译器错误。例如: ``` class Middle : ILeft, IRight { public int P() { return 0; } int ILeft.P { get { return 0; } } } ``` ## 请参阅 [C# 编程指南](https://msdn.microsoft.com/zh-CN/library/67ef8sbd.aspx) [类和结构(C# 编程指南)](https://msdn.microsoft.com/zh-CN/library/ms173109.aspx) [接口(C# 编程指南)](https://msdn.microsoft.com/zh-CN/library/ms173156.aspx) [继承(C# 编程指南)](https://msdn.microsoft.com/zh-CN/library/ms173149.aspx)