无法创建抽象类或接口的实例

Ale*_*lex 41 c# oop interface class instantiation

我有一个类和一个接口,当我尝试实例化接口时,我收到一个错误:

无法创建抽象类或接口的实例

我的代码如下:

namespace MyNamespace
{
    public interface IUser
    {
        int Property1 { get; set; }
        string Property2 { get; set; }
        string Property3 { get; set; }
        void GetUser();
    }

    public class User : IUser
    {
        public int Property1 { get; set; }
        public string Property2 { get; set; }
        public string Property3 { get; set; }

        public void GetUser()
        {
           //some logic here...... 
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试实例化时,IUser user = new IUser();我收到一个错误:

无法创建抽象类或接口的实例

我在这做错了什么?

Cod*_*ray 47

错误消息似乎不言自明.您无法实例化接口的实例,并且已将其声明IUser为接口.(同样的规则适用于抽象类.)接口的重点是它不做任何事情 - 没有为其方法提供实现.

但是,您可以实例化实现该接口的类的实例(为其方法提供实现),在您的情况下是User类.

因此,您的代码需要如下所示:

IUser user = new User();
Run Code Online (Sandbox Code Playgroud)

这个实例化的一个实例User类(其提供实现),并将其分配给该接口类型的对象变量(IUser,它提供了接口,在其中作为程序员可以与对象交互的方式).

当然,你也可以写:

User user = new User();
Run Code Online (Sandbox Code Playgroud)

它创建了一个User类的实例,并将它分配给相同类型的对象变量,但这种方法首先破坏了定义单独接口的目的.


sup*_*cat 36

想象一下,如果一个人进入商店并要求带有电源开关的设备.你没有说你是想要复印机,电视机,吸尘器,台灯,华夫饼机还是其他任何东西.您要求使用带电源开关的设备.您是否希望店员为您提供一些只能被描述为"带电源开关的设备"的东西?

典型的接口类似于"具有电源开关的设备"的描述.知道一台设备是"具有电源开关的设备"将允许人们对其进行一些操作(即打开和关闭它),并且人们可能想要列出例如"具有需要的电源开关的设备"在一天结束时关闭",没有设备必须共享除电源开关之外的任何特性,但是这种情况通常仅在将某些常见操作应用于为某些更特定目的而创建的设备时适用.当从头开始创建某物时,人们更可能使用"复印机","电视","吸尘器"或其他特定类型的设备,而不是一些随机的"带电源开关的设备".

在某些情况下,人们可能想要一个模糊定义的对象,而且实际上并不关心它究竟是什么."给我你最便宜的可以烧水的装置".如果人们可以指定当有人要求具有"水煮"能力的任意物体时,他们应该被提供一个Acme 359电子茶壶,而且当使用课程时,它可以做到这一点.但请注意,有人要求"煮沸水的装置"不会被给予"煮沸水的装置",而是"Acme 359 Electric Teakettle".


Chr*_*int 15

IUser 是接口,你无法实例化接口.

您需要实例化实现接口的具体类.

IUser user = new User();
Run Code Online (Sandbox Code Playgroud)

要么

User user = new User();
Run Code Online (Sandbox Code Playgroud)


Yoc*_*mer 5

您无法实例化接口或抽象类.

那是因为它没有任何逻辑.

接口提供应该在类中的方法的契约,而不实现.(所以界面中没有实际的逻辑).

抽象类提供类的基本逻辑,但功能不完全(并非所有内容都已实现).所以再一次,你将无法用它做任何事情.