You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

接口中“new”运算符的含义?以泛型IEnumerable接口为例

接口中new关键字的含义(以IEnumerable为例)

咱们先把“new用来创建实例”这个固有认知暂时放一边——在接口的继承场景里,new关键字的作用是显式声明要隐藏基接口中的同名成员,说白了就是告诉编译器:“我知道基接口已经有一个叫这个名字的成员了,但我就是要在当前接口里定义一个全新的同名成员,它和基接口的那个不是一回事,别给我弹警告!”

回到你给出的代码例子:

  • 非泛型的IEnumerable接口定义了返回非泛型IEnumerator的GetEnumerator()方法;
  • 泛型的IEnumerable<out T>继承自非泛版,然后用new关键字声明了返回泛型IEnumerator<T>的GetEnumerator()。

这里的new主要有两个核心作用:

  1. 消除编译警告:如果没有这个new,编译器会提示你“当前接口的成员隐藏了基接口的同名成员”,加上new就是明确告诉编译器这是你故意做的,不是疏忽;
  2. 明确成员的独立性:这两个GetEnumerator()是完全独立的抽象契约——当你实现IEnumerable<T>接口时,需要同时实现这两个方法(泛型版和非泛型版),而在调用时:
    • 如果你的变量是IEnumerable<T>类型,调用GetEnumerator()会触发泛型版;
    • 如果变量是IEnumerable类型,调用的就是非泛型版。

要注意的是,接口里的new和类里的new逻辑不同:类里的new是隐藏基类的具体实现,而接口里因为没有具体实现,new只是标记两个同名成员的独立性,让编译器和开发者都清楚这是两个不同的抽象要求。

内容的提问来源于stack exchange,提问作者RollRoll

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:12:44