
Net提供了一个接口,该接口的类型定义不同于Class或Struct. 在某些情况下,接口似乎与抽象类相同,因此有人认为在.Net中,您可以用接口完全替换抽象类. 实际上,否则,接口和抽象类具有各自的优缺点,因此经常在应用程序中结合使用以相互补充.
接下来,讨论抽象类和接口之间的区别.
第一个区别是两者所表达的概念是不同的. 抽象类是事物的高度聚合类型. 对于继承抽象类的子类,对于抽象类,它属于“是”关系;因为接口是用来定义行为规范的,所以对于实现接口的子类而言,与接口相比,“行为需要根据接口来完成”. 例如,这些听起来有些虚构. 例如,dog是所有狗的总称,jingha是狗c# 抽象类和接口的区别,牧羊犬是狗,那么在jingha和牧羊犬中会发现狗的一般特征,然后将它们与Jingha和牧羊犬进行比较,只是是这类事物的抽象类型;为了“吠叫”,狗可以吠叫,而鸟可以吠叫. 显然,前者等同于谈论抽象类c# 抽象类和接口的区别,而后者指的是接口.
第二个区别是,当抽象类定义类型方法时,该方法的实现部分可能会给出,也可能不会给出;对于该接口,其中定义的任何方法都不能提供实现部分.
例如:
公共抽象类AbsTest
{

公共虚拟无效性Test()
{
Debug.WriteLine(“ Test”);
}
公共抽象void NewTest();
}
公共接口ITest

{
void Test();
void NewTest();
}
区别三,继承类以不同的方式实现了两者所涉及的方法. 继承的类不需要重写由抽象类定义的抽象方法,即可以使用抽象类的方法. 对于接口类定义的方法或属性,必须在继承的类“方法和属性”实现中给出相应的方法.
区别4.在抽象类中,如果添加了新方法,则继承的类不得用于任何处理. 对于该接口,您需要修改继承的类以提供新定义的方法.
了解两者之间的区别之后,我们来讨论一下接口相对于抽象类的优势.

好处之一是,该接口不仅可以应用于引用类型,还可以应用于值类型. 抽象类只能作用于引用类型.
好处2: .Net的类型继承只能是单一继承,也就是说,一个类型只能继承一个类型,并且可以继承多个接口. 实际上,我也同意这一点. 多重继承会使继承树变得混乱.
好处三,因为该接口仅定义属性和方法,与实际类型没有多大关系,所以该接口可以被多种类型重用. 与此相比,抽象类和继承类之间的关系更紧密.
好处四,通过该接口,可以减少类型所公开的属性和方法,从而促进对类型对象的保护. 当实现接口的类型可能包含其他方法或属性时,但是当方法返回时,它可以返回接口对象. 这样,调用者只能通过接口提供的方法或属性访问对象的相关元素,从而可以有效地保护对象的其他元素.
好处5: 减少价值类型的拆箱. 对于由Struct定义的值类型数据,当将其存储在集合中时,每次取出时都需要将其拆箱. 这时,使用Struct + Interface的方法可以减少拆箱操作.
请参阅以下文章中提供的方法.
与抽象类相比,接口具有许多优点,但是接口具有致命的弱点,即接口定义的方法和属性只能相对于继承它的类型(除非在接口中修改了借口定义)继承类的Function标签),那么对于多级继承关系,很难实现光接口. 因为如果让每种类型都继承并实现该接口,那么不要说编写代码比较麻烦. 有时执行结果仍然是错误的,特别是当子类型对象被隐式转换为基类对象以进行访问时.

这一次,您需要结合使用接口和虚拟方法来实现. 请参阅继承类型中IDisposable的实现.
实际上,在继承中,是使用接口还是抽象类. 该接口是按约定固定和建立的,因此必须在继承的类中提供接口的相应方法和属性. 对于抽象类,抽象类定义方法的实现贯穿整个继承树,因此不确定该方法的实现或重写. 因此,相对而言,抽象类比接口更灵活.
下面是两者的简单对照表.
接口抽象类
不支持多重继承
类型限制否是,仅引用类型
方法实现必须以继承类型给出方法实现. 不能提供继承类
可伸缩性麻烦且相对灵活
多级继承更麻烦,需要使用虚拟函数更灵活
通常,接口和抽象类是.Net提供的语言手段,目的是更好地实现类型之间的继承关系,二者在某种程度上是互补的. 因此,我不强调使用什么而不使用什么,那么问题的关键在于如何将这两种方法合理地应用到程序中,这一点至关重要.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-247598-1.html