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

在C#中使用接口引用变量的实际用途是什么?,c#,interface,C#,Interface,我知道接口引用变量可以引用实现其接口的任何对象。但使用参考变量的实际用途是什么?我们可以通过使用对象实现同样的效果,那么为什么要使用参考变量呢?这个问题留下了很多解释的空间,但我的问题是: 每个对象变量实际上都是C#中的参考变量: 上述所有变量都是引用变量,因为它们“指向”引用类型。我想你的问题是指:我为什么要写作 IMyInterface i = new MyClassThatImplementsInterface(); 而不是 MyClassThatImplementsInterface

我知道接口引用变量可以引用实现其接口的任何对象。但使用参考变量的实际用途是什么?我们可以通过使用对象实现同样的效果,那么为什么要使用参考变量呢?

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

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

上述所有变量都是引用变量,因为它们“指向”引用类型。我想你的问题是指:我为什么要写作

IMyInterface i = new MyClassThatImplementsInterface();
而不是

MyClassThatImplementsInterface i = new MyClassThatImplementsInterface();
甚至

object i = new MyClassThatImplementsInterface();
简单的回答是:在第一种和第二种情况下,您可以调用由
IMyInterface
定义的所有方法和属性,而在最后一种情况下则不能

但是为什么不使用第二种情况呢?这就是人们使用界面的主要原因。有时您不知道实现类。或者它是在某些库中内部定义的。然而,您需要知道的是,当您调用一个方法时,您会得到一些符合您所知道的接口的对象作为回报。所以这就是你所需要的(有时这也是你所得到的)

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

启动器应用程序对插件一无所知——除了一个包含返回标题、图标、用户界面的
UserControl
等属性的界面


我没有任何课程可以上。所有这些都是一个工厂类,它返回实现我的接口的对象的实例。这就是您所需要的。

假设我们有一个接口iUnderPage,现在页面的呈现可能因设备而异,您可以有一个指向不同实现的通用参考


这就是为什么我们有接口,一个通过实现类来实现的契约,实现这个接口的类可以通过自己的实现参与定义的一组过程。

你应该先用谷歌搜索它:@TeodorIvanov我之前在谷歌上没有发现这个。无论如何,谢谢你为什么不能使用对象引用访问接口方法?你是说
对象x=…
?好的,C#只“知道”您正在使用的变量类型的方法和属性。由于此处的变量类型为
object
,因此只有该类的成员可用。要访问接口的成员或“real”类型,需要显式转换。
object i = new MyClassThatImplementsInterface();