C# 抽象&接口

抽象类:
通过在类定义前面放置关键字 abstract,可以将类声明为抽象类。抽象类不能实例化。 抽象类的用
途是提供一个可供多个派生类共享的通用基类定义。
抽象类可以包含非抽象的方法、属性以及抽象的方法、属性。抽象类和抽象方法都必须在派生类中
用override进行重写。
抽象方法:抽象类也可以定义抽象方法。 方法是将关键字 abstract 添加到方法的返回类型的前面。
抽象方法没有实现,所以方法定义后面是分号,而不是常规的方法块。抽象方法只能声明于抽象类中,
且不包含任何实现。抽象类的派生类必须实现所有抽象方法。 当抽象类从基类继承虚方法时,抽象类
可以使用抽象方法重写该虚方法。
抽象属性:抽象属性声明不提供属性访问器的实现,它只声明该类支持属性,而将访问器实现留给
派生类。
接口:
接口是引用类型,可以实现相关一组功能的定义。接口可以包含方法、属性、事件、索引器,或者
这四个成员类型的任意组合。 接口不能包含常数、字段、运算符、实例构造函数、析构函数或类型。
接口成员将自动是公共的,因此,它们不会包含任何访问修饰符。 成员也不能是 静态。若要实现接口
成员,实现的选件类的相应成员必须是公共的,非静态的,并且具有名称和签名和接口成员相同。
面向对象编程:
面向对象编程代表了一种全新的程序设计思路,与传统的面向过程开发方法不同,面向对象的程序
设计和问题求解更符合人们的思维习惯。
主要特征:按照现实世界的特点来管理复杂的事物,把它们抽象为对象,具有自己的状态和行为,
通过对消息的反应来完成一定的任务。这种编程方法提供了非常强大的多样性,大大增加了代码的重用
机会,增加了程序开发的速度;同时降低了维护负担,将具备独立性特制的程序代码包装起来,修改部
分程序代码时不至于会影响到程序的其他部分。
面向对象的优点:
1、维护简单
模块化是面向对象编程中的一个特征。实体被表示为类和同一命名空间中具有相同功能的类,我们
可以在命名空间中添加一个类而不会影响该命名空间的其他成员。
2、可扩展性
面向对象编程从本质上支持扩展性。如果有一个具有某种功能的类,就可以很快地扩展这个类,创
建一个具有扩展的功能的类。
3、代码重用
由于功能是被封装在类中的,并且类是作为一个独立实体而存在的,提供一个类库就非常简单了。
面向接口编程:
面向接口编程是开发程序的功能先定义接口,接口中定义约定好的功能方法声明,通过实现该接口进
行功能的实现,完成软件或项目的要求.软件或项目随着时间的不断变化,软件的功能要进行升级或完善,开
发人员只需要创建不同的新类重新实现该接口中所有方法,就可以达到系统升级和扩展的目的.
面向接口的优点:
1、降低了程序的耦合性
能够最大限度的解耦。
2、可扩展性
我们知道程序设计的原则是对修改关闭,对新增开放.面向接口编程扩展功能只需要创建新实现类重
写接口方法进行升级扩展就可以,达到了在不修改源码的基础上扩展的目的。
3、可维护性
面向对象编程和面向接口编程区别:
1.面向接口编程和面向对象编程是什么关系
首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的
编程思想,而是附属于面向对象思想体系,属于其一部分。或者说,它是面向对象编程体系中的思想精
髓之一。
2.关于“面向接口编程”中的“接口”与具体面向对象语言中“接口”两个词
个人认为两个“接口”的概念既相互区别又相互联系。“面向接口编程”中的接口是一种思想层面的用
于实现多态性、提高软件灵活性和可维护性的架构部件,而具体语言中的“接口”是将这种思想中的部件
具体实施到代码里的手段。
3.关于抽象类与接口
如果单从具体代码来看,对这两个概念很容易模糊,甚至觉得接口就是多余的,因为单从具体功能
来看,除多重继承外,抽象类似乎完全能取代接口。难道接口的存在是为了实现多重继承?当然不是。
抽象类和接口的区别在于使用动机。使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态
性。所以,如果你在为某个地方该使用接口还是抽象类而犹豫不决时,那么可以想想你的动机是什么。
总而言之,接口与抽象类的区别主要在于使用的动机,而不在于其本身。而一个东西该定义成抽象类还
是接口,要根据具体环境的上下文决定。
面向对象编程和面向接口编程区别:
再者,接口和抽象类的另一个区别在于,抽象类和它的子类之间应该是一般和特殊的关系,而接口仅
仅是它的子类应该实现的一组规则。(当然,有时也可能存在一般与特殊的关系,但我们使用接口的目
的不在这里)
举个例子:
交通工具定义成抽象类,汽车、飞机、轮船定义成子类,是可以接受的,因为汽车、飞机、轮船都是
一种特殊的交通工具。再譬如Icomparable接口,它只是说,实现这个接口的类必须要可以进行比较,
这是一条规则。如果Car这个类实现了Icomparable,只是说,我们的Car中有一个方法可以对两个Car的
实例进行比较,可能是比哪辆车更贵,也可能比哪辆车更大,这都无所谓,但我们不能说“汽车是一种
特殊的可以比较”,这在文法上都不通。

MSDN的建议:
1、如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单易行的方法来控制组件版本。
通过更新基类,所有继承类都随更改自动更新。另一方面,接口一旦创建就不能更改。如果需要接口的
新版本,必须创建一个全新的接口。
2、如果创建的功能将在大范围的全异对象间使用,则使用接口。抽象类应主要用于关系密切的对象,
而接口最适合为不相关的类提供通用功能。
3、如果要设计小而简练的功能块,则使用接口。如果要设计大的功能单元,则使用抽象类。
4、如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。抽象类允许部分实现类,而
接口不包含任何成员的实现。

你可能感兴趣的:(C#,抽象,接口,c#,开发语言)