why we use interface as abstract class also doing same?
本问题已经有最佳答案,请猛点这里访问。
在我的项目中,我拥有所有的虚拟方法,所以我可以在抽象类或接口中声明它。但是为什么我们的用户界面和抽象的用户界面一样呢?
接口看起来像类,但没有实现。
-它只包含事件、索引器、方法和/或属性的声明。
-接口只提供声明的原因是它们由类和结构继承,类和结构必须为声明的每个接口成员提供实现。
C中的接口是作为多重继承的替换提供的。
-因为C ^不支持多重继承,所以必须引入一些其他方法,以便类可以继承多个类的行为,避免在C++中发现名称模糊的问题。
-由于名称不明确,如果类对象的两个基类包含相同的命名方法,则该类的对象不知道要调用哪个方法。
接口目的
-创建松散耦合的软件
-按合同支持设计(实现者必须提供整个接口)
-允许插入式软件
-允许不同对象轻松交互
-相互隐藏类的实现细节
-促进软件的重用
如果文本对您没有帮助,那么让我给您举个例子,最近我创建了一个控件集合,这些控件都是从共享一个公共函数
1 2 3 | public MyTextBox : TextBox public MyComboBox : ComboBox public MyLabel : Label |
当我需要调用此函数时,它需要更改所有标签、文本框和组合框。现在,如果我不使用接口,我必须这样做
1 2 3 4 5 6 | foreach(MyTextBox tb in this.Controls.OfType<MyTextBox>()) tb.UnitChanged(); foreach(MyComboBox cb in this.Controls.OfType<MyComboBox >()) cb.UnitChanged(); foreach(MyLabel lab in this.Controls.OfType<MyLabel>()) lab.UnitChanged(); |
现在有了一个接口
1 2 | foreach(IMyInterface control in this.Controls.OfType<IMyInterface >()) control.UnitChanged(); |
抽象类允许一些实现作为基础。接口还允许多重继承。
受驱动类可以实现多个接口,但只有每个受驱动类可以从一个类继承