知识大全 C#中抽象类和接口的区别与使用
Posted 知
篇首语:笛里谁知壮士心,沙头空照征人骨。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#中抽象类和接口的区别与使用相关的知识,希望对你有一定的参考价值。
C#中抽象类和接口的区别与使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
一 抽象类
抽象类是特殊的类 只是不能被实例化 除此以外 具有类的其他特性 重要的是抽象类可以包括抽象方法 这是普通类所不能的 抽象方法只能声明于抽象类中 且不包含任何实现 派生类必须覆蓋它们 另外 抽象类可以派生自一个抽象类 可以覆蓋基类的抽象方法也可以不覆蓋 如果不覆蓋 则其派生类必须覆蓋它们
二 接口
接口是引用类型的 类似于类 和抽象类的相似之处有三点
不能实例化
包含未实现的方法声明
派生类必须实现未实现的方法 抽象类是抽象方法 接口则是所有成员(不仅是方法包括其他成员)
另外 接口有如下特性 接口除了可以包含方法之外 还可以包含属性 索引器 事件 而且这些成员都被定义为公有的 除此之外 不能包含任何其他的成员 例如 常量 域 构造函数 析构函数 静态成员 一个类可以直接继承多个接口 但只能直接继承一个类(包括抽象类)
三 抽象类和接口的区别
类是对对象的抽象 可以把抽象类理解为把类当作对象 抽象成的类叫做抽象类 而接口只是一个行为的规范或规定 微软的自定义接口总是后带able字段 证明其是表述一类类 我能做 抽象类更多的是定义在一系列紧密相关的类间 而接口大多数是关系疏松但都实现某一功能的类中
接口基本上不具备继承的任何具体特点 它仅仅承诺了能够调用的方法;
一个类一次可以实现若干个接口 但是只能扩展一个父类
接口可以用于支持回调 而继承并不具备这个特点
抽象类不能被密封
抽象类实现的具体方法默认为虚的 但实现接口的类中的接口方法却默认为非虚的
当然您也可以声明为虚的
(接口)与非抽象类类似 抽象类也必须为在该类的基类列表中列出的接口的所有成员提供它自己的实现 但是 允许抽象类将接口方法映射到抽象方法上
抽象类实现了oop中的一个原则 把可变的与不可变的分离 抽象类和接口就是定义为不可变的 而把可变的座位子类去实现
好的接口定义应该是具有专一功能性的 而不是多功能的 否则造成接口污染 如果一个类只是实现了这个接口的中一个功能 而不得不去实现接口中的其他方法 就叫接口污染
尽量避免使用继承来实现组建功能 而是使用黑箱复用 即对象组合 因为继承的层次增多 造成最直接的后果就是当你调用这个类群中某一类 就必须把他们全部加载到栈中!后果可想而知 (结合堆栈原理理解) 同时 有心的朋友可以留意到微软在构建一个类时 很多时候用到了对象组合的方法 比如中 Page类 有Server Request等属性 但其实他们都是某个类的对象 使用Page类的这个对象来调用另外的类的方法和属性 这个是非常基本的一个设计原则
如果抽象类实现接口 则可以把接口中方法映射到抽象类中作为抽象方法而不必实现 而在抽象类的子类中实现接口中方法 四 抽象类和接口的使用
如果预计要创建组件的多个版本 则创建抽象类 抽象类提供简单的方法来控制组件版本
如果创建的功能将在大范围的全异对象间使用 则使用接口 如果要设计小而简练的功能块 则使用接口
如果要设计大的功能单元 则使用抽象类 如果要在组件的所有实现间提供通用的已实现功能 则使用抽象类
抽象类主要用于关系密切的对象 而接口适合为不相关的类提供通用功能
以下是我在网上看到的几个形象比喻 真的非常不错 呵呵:
飞机会飞 鸟会飞 他们都继承了同一个接口 飞 但是F 属于飞机抽象类 鸽子属于鸟抽象类
就像铁门木门都是门(抽象类) 你想要个门我给不了(不能实例化)
cha138/Article/program/net/201311/12755相关参考
语法层次上的区别 ()创建方法 viewplainprint? abstractclass 抽象类名{ }interface接口名{ } ()内容 抽象类里面可以有属性和方
Java抽象类和接口的比较 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
MSDN抽象类是从子类发现了公共的东西泛化(也可以说把公共的东西单独提取出来)出父类然后子类继承父类而接口是根本不知道子类的存在方法如何实现还不确定预先定义的 有一个人他叫王麻子那年他生了个儿子
C#接口和抽象类技术特点浅析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一C#抽象类 C#
在我们所有乐器(Instrument)例子中基础类Instrument内的方法都肯定是伪方法若去调用这些方法就会出现错误那是由于Instrument的意图是为从它衍生出去的所有类都创建一个通用接口
作者Allen 抽象方法是必须实现的方法就象动物都要呼吸但是鱼用鳃呼吸猪用肺呼吸 动物类要有呼吸方法怎么呼吸就是子类的事了 现在有很多讨论和建议提倡用interface代替abstra
抽象类 继承层越高类就更通用并且更抽象有些层中的祖先类非常通用更适于作为其他类的框架而不适于作为具体类来使用其特定实例
知识大全 抽象类(abstract class)和接口(interface)
java中的abstractclass和interface abstractclass和interface是Java语言中对于抽象类定义进行支持的两种机制正是由于这两种机制的存在才赋予了Java
本文是学习抽象类的以及抽象类中静态字段静态方法的知识 我写本文前对抽象类的理解 A是为了继承的需要或者是为了多态的需要把具有类似行为的一组概念写成一个抽象类但是抽象类里面不实现任何行为仅仅是定
选择Java接口还是抽象类 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 选择Java接口