1

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

4

4 回答 4

4

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

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

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

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

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

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

接口的用途

- 创建松散耦合的软件

- 支持按合同设计(实现者必须提供整个接口)

- 允许可插拔软件

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

-彼此隐藏类的实现细节

- 促进软件的重用

于 2013-07-13T10:52:52.510 回答
2

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

于 2013-07-13T10:48:37.013 回答
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();
于 2013-07-13T11:03:25.067 回答
0

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

于 2013-07-13T11:07:01.007 回答