CLR via C# 学习笔记(2012/3/10)

来源:互联网 发布:mac管理员的名称和密码 编辑:程序博客网 时间:2024/04/28 12:31

第13章 接口

引入接口是为了解决多继承的问题。C#等托管语言,Java之类都是单继承的编程语言,为了实现多继承,就使用接口来实现。

接口的定义很简单,也就是定义几个方法签名,并且不需要添加访问性,C#会默认生成的。而继承接口的类需要将接口中的方法都实现才能编译成功,和继承基类相比,继承接口需要做得很多功夫。


当一个类继承的几个接口中,有方法签名是一样的,这时候可以使用显式实现接口的方法,例如:

interface IWindow { void GetMenu();}

interface IRestaurant { void GetMenu();}

public sealed class MarioPizzeria : IWindow, IRestaurant
    {
        void IWindow.GetMenu()
        {
            Console.WriteLine("IWindow");
        }


        void IRestaurant.GetMenu()
        {
            Console.WriteLine("IRestaurant");
        }


        public void GetMenu()
        {
            Console.WriteLine("MarioPizzeria");
        }
    }

这样当MarioPizzeria类的实例调用GetMenu()是其本身的公共方法,而将其转换成IWindow,调用的就是IWindow.GetMenu()方法了,转换成IRestaurant也一样。

一般不建议以显式来实现接口方法,这样会导致继承MarioPizzeria的派生类不能调用接口的方法,只能在方法里将其转换成对应的接口才能调用。


最后介绍了一些设计类时,选择基类还是接口的问题。这个一般是以类是is-a还是can-do的关系来决定,is-a就选择基类,can-do就选择接口。

原创粉丝点击