为什么我们使用接口作为抽象类也做同样的事情
本文关键字:抽象类 我们 接口 为什么 | 更新日期: 2023-09-27 18:22:08
在我的项目中,我有所有的虚拟方法。所以我可以在抽象类或接口中声明它。但为什么我们的用户界面和我们用抽象可以做的一样呢?
接口看起来像一个类,但没有实现。
-它只包含事件、索引器、方法和/或属性的声明。
-接口只提供声明的原因是它们是由类和结构继承的,它们必须为声明的每个接口成员提供一个实现。
C#中的接口是作为多重继承的替代品提供的
-因为C#不支持多重继承,所以有必要合并一些其他方法,以便类可以继承多个类的行为,从而避免C++中存在的名称歧义问题。
-由于名称不明确,如果类对象的两个基类包含相同的命名方法,则该类的对象不知道该调用哪个方法。
接口的目的
-创建松耦合软件
-合同支持设计(实施者必须提供整个接口)
-允许插入式软件
-允许不同对象轻松交互
-向其他隐藏类的实现细节
-促进软件的重用
抽象类允许一些实现作为基础。接口还允许多重继承。
如果文本对您没有帮助,那么让我给您举一个例子,最近我创建了一个控件集合,这些控件都来自共享公共函数UnitChanged()
的其他控件(每个控件都做了不同的事情)。
public MyTextBox : TextBox
public MyComboBox : ComboBox
public MyLabel : Label
当我需要调用这个函数时,它需要更改所有标签、文本框和组合框现在,如果我不使用接口,我将不得不进行
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();
现在有了接口
foreach(IMyInterface control in this.Controls.OfType<IMyInterface >())
control.UnitChanged();
驱动类可以实现多接口,但只有每个驱动类可以从一个类继承