1.继承就是说它是某物(is a的关系),针对相关类,而接口是说它有某个功能(behaves like.)可以是不相关的
基类是描述对象是什么,接口描述对象有某种行为。
2.不能在接口里提供任何成员的具体实现.只是定义属性,事件和索引器等。
抽象基类可以为派生类提供一些具体的实现,另外也描述了一些公共的行为。
一个接口可以被任意多个不相关的类型实现。比起在基类中编码,实现接口的编码可以在开发人员中提供更强的伸缩性。
3.接口做参数和返回值:让方法的参数和返回值使用接口,可以让程序具有通用性,而且更容易重用。
当类型以类的方式暴露一些属性时就暴露了类的全部接口。用接口你可以选择只暴露一部分想提供给用户使用的方法和属性。以前在类上实现接口的详细内容后来是可以修改的
public IListSource TheCollection //选择接口而不是Dataset类型 { get { return _dataSetCollection as IListSource; } }
4.雇员,客户和卖主都不相关,至少不存在继承关系。但他们却共享着某些功能。
他们都有名字,地址,以及联系电话。你应该在一个接口中创建这些属性。
public interface IContactInfo { string Name { get; } PhoneNumber PrimaryContact { get; } PhoneNumber Fax { get; } Address PrimaryAddress { get; } } public class Employee : IContactInfo { // implementation deleted. }
5.补充:曾经在不少书上看到作者推荐同时定义接口和抽象类,而非独立选择其中一种。
6.推荐在定义一个基类时应该用虚方法。