显式接口成员实现
如果类实现两个接口,并且这两个接口包含具有相同签名的成员,那么在类中实现该成员时,将导致两个接口都使用该成员作为它们的实现,然而,如果两个接口成员实现不同的功能,那么这可能会导致其中一个接口的实现不正确或两个接口的实现都不正确,这时可以显式地实现接口成员,即创建一个仅通过该接口调用并且特定于该接口的类成员。显式接口成员实现是使用接口名称和一个句点命名该类成员来实现的。
例 创建一个控制台应用程序,其中声明了两个接口ImyInterface1和ImyInterface2,在这两个接口中声明了一个同名方法Add,然后定义一个类MyClass,该类继承自已经声明的两个接口,在MyClass类中实现接口中的方法时,由于ImyInterface1和ImyInterface2接口中声明的方法名相同,这里使用了显式接口成员实现,最后在主程序类Program的Main方法中使用接口对象调用接口中定义的方法。代码如下:
interface ImyInterface1
{
/// <summary>
/// 求和方法
/// </summary>
/// <returns>加法运算的和</returns>
int Add();
}
interface ImyInterface2
{
/// <summary>
/// 求和方法
/// </summary>
/// <returns>加法运算的和</returns>
int Add();
}
class myClass : ImyInterface1, ImyInterface2 //继承接口
{
/// <summary>
/// 求和方法
/// </summary>
/// <returns>加法运算的和</returns>
int ImyInterface1.Add() //显式接口成员实现
{
int x = 98;
int y = 368;
return x + y;
}
/// <summary>
/// 求和方法
/// </summary>
/// <returns>加法运算的和</returns>
int ImyInterface2.Add() //显式接口成员实现
{
int x = 98;
int y = 368;
int z = 698;
return x + y + z;
}
}
class Program
{
static void Main(string[] args)
{
myClass myclass = new myClass(); //实例化接口继承类的对象
ImyInterface1 imyinterface1 = myclass; //使用接口继承类的对象实例化接口
Console.WriteLine(imyinterface1.Add()); //使用接口对象调用接口中方法
ImyInterface2 imyinterface2 = myclass; //使用接口继承类的对象实例化接口
Console.WriteLine(imyinterface2.Add()); //使用接口对象调用接口中方法
Console.ReadLine();
}
}
注意:
(1)显式接口成员实现中不能包含访问修饰符、abstract、virtual、override或static修饰符;
(2)显式接口成员是属于接口的成员,而不是类的成员,因此,不能使用类对象直接访问,只能通过接口对象来访问。