在C#中使用接口引用变量的实际用途是什么?

时间:2016-02-22 11:13:56

标签: c# interface

我知道接口引用变量可以引用任何实现其接口的对象。但是使用引用变量的实际用途是什么?我们可以通过使用对象来实现相同的目标,那么为什么要使用引用变量?

2 个答案:

答案 0 :(得分:2)

这个问题留下了很多解释空间,但这是我的:

每个对象变量实际上都是C#中的引用变量:

MyClass c = new MyClass();
IMyInterface i = new MyClassThatImplementsInterface();
object o = new object();

以上所有都是参考变量,因为它们"指向"引用类型。我想你的问题是:我为什么要写

IMyInterface i = new MyClassThatImplementsInterface();

而不是

MyClassThatImplementsInterface i = new MyClassThatImplementsInterface();

甚至

object i = new MyClassThatImplementsInterface();

简单的答案是:您可以在第一种和第二种情况下调用IMyInterface定义的所有方法和属性,而在最后一种情况下则不能。

但为什么不使用第二种情况呢?嗯,这主要是人们使用接口的原因。有时您不会知道实施班级。或者它在某些库中内部定义。但是,您需要知道的是,当您调用方法时,您会得到一些符合您所知接口的对象。这就是你所需要的一切(有时你也得到了所有这些)。

例如:
我最近创建了一个应用程序,可以显示插件DLL中定义的模块,这些模块由启动器应用程序动态加载。启动器应用程序为每个插件添加按钮,并在按下插件按钮时更改UI。

启动器应用程序知道关于插件的 nothing - 除了包含返回标题,图标,用户界面UserControl等属性的一个界面外。

我可以使用的任何课程。所有都有一个工厂类,它返回一个实现我的接口的对象的实例。这就是你需要的全部。

答案 1 :(得分:0)

让我们说我们有一个界面IRenderPage,现在页面的渲染可能因设备而异,你可以有一个指向不同实现的公共参考。

这就是为什么我们有接口,通过实现类来实现的契约,并且实现此接口的类可以参与具有自己的实现的已定义的进程集。