为什么我们使用接口作为抽象类也做同样的事情?

时间:2013-07-13 10:47:04

标签: c# oop

在我的项目中,我拥有所有虚拟方法。所以我可以在抽象类或接口中声明它。但为什么我们的用户界面与抽象一样?

4 个答案:

答案 0 :(得分:4)

接口看起来像一个类,但没有实现。

- 它包含的唯一内容是事件,索引器,方法和/或属性的声明。

- 接口只提供声明的原因是它们是由类和结构继承的,它们必须为声明的每个接口成员提供一个实现。

提供C#中的接口作为多重继承。

的替代

- 因为C#不支持多继承,所以有必要合并一些其他方法,以便该类可以继承多个类的行为,避免发现名称歧义问题在C ++中。

- 如果名称不明确,如果该类对象的两个基类包含相同的命名方法,则该类的对象不知道要调用哪个方法。

接口的目的

- 创建松散耦合的软件

- 按合同支持设计(实施者必须提供整个界面)

-allow for pluggable software

- 允许不同的对象轻松互动

- 隐藏彼此类的实现细节

- 促进软件的重复使用

答案 1 :(得分:2)

抽象类允许某些实现作为基础。接口还允许多重继承。

答案 2 :(得分:2)

如果文本没有帮助你,那么让我给你一个例子,最近我创建了一个控件集合,这些控件都是从共享一个共同函数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();

答案 3 :(得分:0)

驱动类可以实现多接口,但只有每个驱动类都可以从一个类继承