C# 接口(实现多个接口)
实现多个接口
到现在为止,类只实现了单个接口。
- 类或结构可以实现任意数量的接口。
- 所有实现的接口必须列在基类列表中并以逗号分隔(如果有基类名称,则在其之后)。
例如,如下的代码演示了MyData类,它实现了两个接口:TDataStore和1DataRetrieveo图16-5
演示了MyData类中多个接口的实现。
interface IDataRetrieve{int GetData();} //声明接口
interface IDataStrore {void SetData(int x);} //声明接口class MyData:IDataRetrieve,IDataStrore //声明类 接口
{int Mem1;public int GetData() {return Mem1;}public void SetData(int x){Mem1=x;}
}class Program
{static void Main(){MyData data=new MyData();data.SetData(5);Console.WriteLine($"Value={data.GetData()}");}
}

实现具有重复成员的接口
由于类可以实现任意数量的接口,有可能两个或多个接口成员具有相同的签名和返回类型。
编译器如何处理这样的情况呢?
例如,假设有两个接口IIfc1和IIfc2,如下所示。每一个接口都有一个名为Print0ut的方
法,它们具有相同的签名和返回类型。如果我们要创建实现这两个接口的类,怎么处理重复接口
的方法呢?
interface IIfc1
{void PrintOut(string s);
}interface IIfc2
{void PrintOut(string t);
}
答案是:如果一个类实现了多个接口,并且其中一些接口成员具有相同的签名和返回类型,
那么类可以实现单个成员来满足所有包含重复成员的接口。
例如,如下代码演示了MyClass类的声明,它实现了IIfc1和IIfc20方法Print0ut的实现
满足了两个接口的需求。
class MyClass:IIfc1,IIfc2 //实现两个接口
{public void PrintOut(string s) //两个接口的单一实现{Console.WriteLine($"Calling through:{s}");}
}class Program
{static void Main(){MyClass mc=new MyClass();mc.PrintOut("object");}
}
图16-6演示了利用单个类级别的方法的实现来实现重复接口的方法。