C# 中抽象类和接口的区别(简单理解)


#区别

#区别一:

两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。这些听起来有些虚,举个例子。例如,狗是对于所有狗类动物的统称,京哈是狗,牧羊犬是狗,那么狗的一般特性,都会在京哈,牧羊犬中找到,那么狗相对于京哈和牧羊犬来说,就属于这类事物的抽象类型;而对于“叫”这个动作来说,狗可以叫,鸟也可以叫。很明显,前者相当于所说的是抽象类,而后者指的就是接口。

#区别二:

抽象类在定义类型方法的时候,可以给出方法的实现部分(没有标记abstract),也可以不给出(标记abstract);而对于接口来说,其中所定义的方法都不能给出实现部分。

#区别三:

继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写 ;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和实现。也就是说,在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。

#接口相对于抽象类的优势

#好处一:

接口不光可以作用于引用类型,也可以作用于值类型。而抽象类来说,只能作用于引用类型。

#好处二:

.Net的类型继承只能是单继承的,也就是说一个类型只能继承一个类型,而可以继承多个接口。

#好处三:

通过接口,可以减少类型暴露的属性和方法,从而便于保护类型对象。当一个实现接口的类型,可能包含其他方法或者属性,但是方法返回的时候,可以返回接口对象,这样调用端,只能通过接口提供的方法或者属性,访问对象的相关元素,这样可以有效保护对象的其他元素。

#好处四:

减少值类型的拆箱操作。对于Struct定义的值类型数据,当存放集合当中,每当取出来,都需要进行拆箱操作,这时采用Struct+Interface结合的方法,从而降低拆箱操作。

#两者的简单对比表格

接口抽象类
多继承支持不支持
类型限制没有有,只能是引用类型
方法实现继承类型中必须给出方法实现继承类中可以不给出
扩展性比较麻烦相对比较灵活
多层继承比较麻烦,需要借助虚函数比较灵活

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值