C#官方文档称接口必须初始化,该表述的具体含义是什么?
C# 接口实例化表述问题解答
你的原有理解完全符合C#语法的设计逻辑,不存在认知错误:接口本身是抽象契约定义,不包含任何实现,本身无法被直接实例化,也不存在独立的「接口初始化」操作。微软文档的表述只是面向入门开发者的简化通俗说法,并非严谨的语法定义。
对文档中两个容易混淆的表述的实际含义解释如下:
- 「创建IMyInterface的实例」实际指代的是声明接口类型的引用变量,并将其指向一个实现了该接口的类的实例。你看到的示例代码
IMyInterface iface = new MyClass();中,真正在堆上创建的实例还是MyClass类的对象,赋值操作只是做了一次安全的向上类型转换,和你直接把MyClass实例传入接收IMyInterface类型参数的方法逻辑完全一致:后者本质是方法的形参隐式完成了这个类型转换操作,没有任何额外的特殊逻辑。 - 「接口必须与实现它的类对象一同初始化」实际是想强调:不存在脱离实现类的接口实例,所有接口类型的变量,必须绑定到一个具体的实现类实例才能正常使用。你可以直接尝试编译
IMyInterface test = new IMyInterface();这段代码,编译器会直接抛出「无法创建抽象类或接口的实例」的错误,直接就能验证接口本身无法被实例化的结论。
你之前开发中的用法完全符合规范,文档的简化表述只是为了降低入门理解成本,并没有违背接口的设计意义。
内容的提问来源于stack exchange,提问作者sdb
相关产品推荐
相关产品推荐

