1

如果一个类被实例化,它将创建一个对象。内存将分配给实例。
如果接口实例化会发生什么?
接口有构造函数吗?它是否创建了一个接口对象。它是否将内存分配给接口对象

interface IInteface {}   
class Test : IInterface{}

IInterface ex1 = new Test();

上面的行会创建什么?

4

2 回答 2

4

接口是无法实例化的抽象概念。它们用于定义要实现的类的合同。

然后,您可以创建实现接口的具体类的实例(通常使用new),并使用接口引用指向实例。

于 2013-11-04T04:03:22.823 回答
1

接口没有构造函数,也不能自己创建。

将对象分配给变量(包括接口类型的变量)不会创建新对象,它只是对同一对象的另一个引用。

 class DerivedWithInterface: Base, IEnumerable {}

现在您可以创建DerivedWithInterface类的实例并分配给任何基类/接口的变量,但只会new创建一个对象:

 DerivedWithInterface item = new DerivedWithInterface();
 IEnumerable asEnumerable = item; // asEnumerable is the same object as create before
 Base asBase = item;

现在您可以将转换回原始对象,并且仍然会有一个(或与您new编辑的一样多):

 IEnumerable asEnumerableItem = new DerivedWithInterface(); 
 DerivedWithInterface itemViaCast = (DerivedWithInterface)asEnumerableItem;

两者asEnumerableItemitemViaCast引用相同的单个实例 和 类型的对象asEnumerableItem

于 2013-11-04T04:29:52.867 回答