如果一个类被实例化,它将创建一个对象。内存将分配给实例。
如果接口实例化会发生什么?
接口有构造函数吗?它是否创建了一个接口对象。它是否将内存分配给接口对象
interface IInteface {}
class Test : IInterface{}
IInterface ex1 = new Test();
上面的行会创建什么?
接口是无法实例化的抽象概念。它们用于定义要实现的类的合同。
然后,您可以创建实现接口的具体类的实例(通常使用new
),并使用接口引用指向该实例。
接口没有构造函数,也不能自己创建。
将对象分配给变量(包括接口类型的变量)不会创建新对象,它只是对同一对象的另一个引用。
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;
两者asEnumerableItem
和itemViaCast
引用相同的单个实例 和 类型的对象asEnumerableItem