c# - 当我们创建接口(interface)对象时会发生什么?

标签 c# oop interface

<分区>

我是 C# 接口(interface)的新手。那么有人可以解释一下当我们创建接口(interface)对象时实际发生了什么吗?

我知道为什么我们有其他语言的接口(interface),但无法真正理解为什么 C# 允许创建接口(interface)的对象(实例)的逻辑? 如果接口(interface)没有函数定义或变量,那么如何创建对象?

我一直在论坛上搜索,但找不到要点。 这是我在界面上找到的教程 http://www.c-sharpcorner.com/uploadfile/6897bc/interfaces-in-C-Sharp/ 如果您访问该链接,您会看到作者首先创建了一个类的对象,而不是一个接口(interface)的对象。当他写作时

Interface_object = class_object;    

接口(interface)对象从类对象中提取特征..​​.
如果接口(interface)中没有实现和变量,它如何以及为什么会发生?

最佳答案

实际上你不能创建一个接口(interface)的实例。

您创建某个类的实例,实现接口(interface)。实际上可以有几十个类,实现一个接口(interface)。因此,当您使用接口(interface)类型的变量时,唯一可以保证的是该变量实际上引用的对象实现了该接口(interface),您可以使用任何接口(interface)方法、属性等。

interface IFoo
{
   void DoFoo();
}

class Foo1: IFoo
{
    public DoFoo()
    {
        //one implementation
    }
}

class Foo2: IFoo
{
    public DoFoo()
    {
        //the other implementation
    }
}

IFoo tmp = new Foo1();
tmp = new Foo2();

您可能会在SO: Using Interface variables中看到深入的解释

关于c# - 当我们创建接口(interface)对象时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17290336/

相关文章:

java - “在子类实例化期间,父类(super class)的私有(private)字段是否也在堆内存中占有一席之地?

java - 为什么在从默认接口(interface)方法调用静态接口(interface)方法时不能使用它?

c++ - 如何读取 Linux 网络接口(interface)文件 (/etc/network/interfaces) 上的参数

c# - 声明成员时可以指定接口(interface)吗?

c# - c#中的多个拆分字符串

c# - c# 实现 select 命令后插入命令参数的 if/else 语句?

c# - 简单的 LINQ to Entities 翻译

c# - 不能修改返回值,因为它不是变量

c# - 如何在协作/通信图中发出对象实例化信号?

c# - 通过 View 模型图/树进行验证