显示接口
在c#中,将定义方法的那个接口的名称作为方法名前缀,就会创建显示接口方法实现。
在调用显示接口的实现时必须将对象转换为具体的接口才能调用所需的方法: 如下所示:
interface IWindow
{
Object GetMenu();
}
interface IRestaurant
{
Object GetMenu();
}
public sealed class MarioPizzeria: IWindow, IRestaurant
{
//这是IWindow的GetMenu方法的实现
Object IWindow.GetMenu() { return null; }
//这是IRestaurant的GetMenu方法的实现
Object IRestaurant.GetMenu() { return null; }
//这个GetMenu方法是可选的,与接口无关
public Object GetMenu() { return null; }
}
public class testt
{
public void t()
{
MarioPizzeria mario = new MarioPizzeria();
//调用MarioPizzeria的公共GetMenu方法
mario.GetMenu();
//调用MarioPizzeria的IWindow.GetMenu方法
IWindow window = mario;
window.GetMenu();
//调用MarioPizzeria的IRestaurant.GetMenu方法
IRestaurant restaurant = mario;
restaurant.GetMenu();
}
}
显示接口(EIMI)最主要的问题:
1. 没有文档解释类型具体如何实现一个EIMI方法,也没有Microsoft Visual Studio “智能感知” 支持
2. 值类型的实例在转换成接口时装箱
3. EIMI不能由派生类调用
泛型接口
泛型接口的优点:
1. 细致的类型约束;
2. 避免了值类型的装箱和拆箱;