问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

asp.net接口和基类的区别

发布网友 发布时间:2022-04-27 08:40

我来回答

2个回答

懂视网 时间:2022-04-27 13:02

前言

大家应该都知道,在.Net中提供了接口,这个不同于Class或者Struct的类型定义。接口有些情况,看似和抽象类一样,因此有些人认为在.Net可以完全用接口来替换抽象类。其实不然,接口和抽象类各有长处和缺陷,因此往往在应用当中,两者要结合来使用,从而互补长短。下面话不多说,来一起看看详细的介绍吧。

接下来先说说抽象类和接口的区别:

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

区别二,抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。

例如:

publicabstractclassAbsTest
{
publicvirtualvoidTest()
{
Debug.WriteLine("Test");
}
publicabstractvoidNewTest();
}
publicinterfaceITest
{
voidTest();
voidNewTest();
}

区别三,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。

区别四,在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。

知道了两者的区别,再来说说,接口相对于抽象类的优势。

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

好处二,.Net的类型继承只能是单继承的,也就是说一个类型只能继承一个类型,而可以继承多个接口。其实,我对于这一点也比较赞同,多继承会使继承树变的混乱。

好处三,由于接口只是定义属性和方法,而与真正实现的类型没有太大的关系,因此接口可以被多个类型重用。相对于此,抽象类与继承类的关系更紧密些。

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

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

相对于抽象类来说,接口有这么多好处,但是接口有一个致命的弱点,就是接口所定义的方法和属性只能相对于继承它的类型(除非在继承类中修改接口定义的函数标示),那么对于多层继承关系的时候,光用接口就很难实现。因为如果让每个类型都去继承接口而进行实现的话,首先不说编写代码比较繁琐,有时候执行的结果还是错误,尤其当子类型对象隐式转换成基类对象进行访问的时候。

那么这时候,需要用接口结合虚方法来实现。其实在继承中,到底使用接口还是抽象类。接口是固定的,约定俗成的,因此在继承类中必须提供接口相应的方法和属性的实现。而对于抽象类来说,抽象类的定义方法的实现,贯穿整个继承树,因此其中方法的实现或者重写都是不确定的。因此相对而言,抽象类比接口更灵活一些。

如下给出两者的简单对比表格。

接口

抽象类

多继承

支持

不支持

类型限制

没有

有,只能是引用类型

方法实现

继承类型中必须给出方法实现

继承类中可以不给出

扩展性

比较麻烦

相对比较灵活

多层继承

比较麻烦,需要借助虚函数

比较灵活

总的来说,接口和抽象类是.Net为了更好的实现类型之间继承关系而提供的语言手段,而且两者有些相辅相成的关系。因此我并不强调用什么而不用什么,那么问题的关键在于,如何把这两种手段合理的应用到程序当中,这才是至关重要。

总结

热心网友 时间:2022-04-27 10:10

一个类可以同时实现多个接口,但一个类只能同时派生自一个基类。
接口只有成员的定义,不能含有任何成员的实现,而抽象类可以含有某些成员的具体实现。
从我个人感觉上,接口更适合定义一种行为框架,定义大家需要遵守的行为约定,如果某些类需要遵守这种行为框架,则需要实现这个接口。而抽象类,则更具有“实体”意义,可以包含共同的属性、方法定义以及需要的话,可以包含默认的实现。从选用角度上说,我觉得,主要是从要定义的东西是否具有更强的“实体”意义,如果是,那么倾向于实现为抽象类,如果具有更强的“行为约束”含义,则定义为接口。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
build腰带迷失漂流瓶几元 BANDAI万代假面骑士Build 飞电01驱动器-适用对象 BANDAI 万代 假面骑士Build 飞电01驱动器-详细介绍 纸胶带能做什么手工 黑死病是哪个时期 黑死病和伽利略谁的时代更早 双十二有购物津贴吗 双12购物津贴领取方法和使用规则 双十二满减是多少?满减有什么规则? 双十二满减规则是什么?详细内容介绍 双12淘宝如何满减?规则是什么? 第一次和相亲对象约会,出去玩一天,再把他送回家我男,都是农村的,去廊坊自然公园好还是人民公园 移动宽带猫有四口为什么只有一口能用 廊坊5.1相亲大会在哪报名啊 怎样能把一个人的推给另一个人 廊坊哪里有正规的婚姻介绍所? 分子、分母、分数线分别表示什么意义 四川外国语学院西班牙语专业 文科的分数线和其他特殊要求 四口光猫和路由器怎么设置 移动光猫用4股的网线能接路由器吗 2013年国考银监会特殊职位的总分是怎么算的?为什么查询系统里面那个总分才60几分呢? 新手机如何把旧手机上的微信存储的移过来 我的移动光猫友四个网口,只能用口1上网吗?其他三个只能联电视吗? 特殊指法分数 移动4口光猫,口1接路由器能上网,口2到口4接电脑不能上网? 特殊分数有哪些 写出计算中常用的特殊分数,并把它化成百分数线、小数 请问特殊的分数有哪些?如:二分之一等于零点五 四分之一等于零点七五 最好能列出10个。谢谢。 怎样能把自己的从对方的微信里彻底删除? 斐济果的原产地不是新西兰? 密云龙的茶文化 怎样能把自己的从对方的微信里彻底删除 怎样才能把两个绑定在一起? 怎样能把自己的从对方的微信里彻底删除? 拿花椒泡水喝,对身体有哪些好处? 建立儿童集体学习的意思和规则 花椒泡水喝能治血脂稠吗 山东宏莱贸易有限公司怎么样? 山东聊城宏巨卫生用品有限公司怎么样? 诸暨市宏火日化有限公司怎么样? 浦江盛宏化纤有限公司怎么样? 求平砍加十字军打击和翅膀加狂暴绑定的宏 求魔兽世界ND的几个宏 沈阳【华硕】售后维修地址在哪?我想要修【台式机】的华硕主板 小白菜大骨头汤怎么做如何做好吃 炖粉条的做法,脊骨白菜炖粉条怎么做好吃 晚礼服走秀是什么样的工作 我去面试了一个晚礼服走秀说是晚上走4到6个小时会到处出差请问这种靠谱吗? 优雅的走台礼服秀手势动作示范教程 晚礼服走秀队员是干嘛的 做快递怎样防止不丢快递件?