更新:2007 年 11 月
如果
C# | 复制代码 |
---|---|
interface IControl { void Paint(); } interface ISurface { void Paint(); } class SampleClass : IControl, ISurface { // Both ISurface.Paint and IControl.Paint call this method. public void Paint() { } } |
然而,如果两个
C# | 复制代码 |
---|---|
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 使用。两个方法实现都是分离的,都不可以直接在类中使用。例如:
C# | 复制代码 |
---|---|
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. |
显式实现还用于解决两个接口分别声明具有相同名称的不同成员(如属性和方法)的情况:
C# | 复制代码 |
---|---|
interface ILeft { int P { get;} } interface IRight { int P(); } |
为了同时实现两个接口,类必须对属性 P 和/或方法 P 使用显式实现以避免编译器错误。例如:
C# | 复制代码 |
---|---|
class Middle : ILeft, IRight { public int P() { return 0; } int ILeft.P { get { return 0; } } } |