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

求解C#接口重实现替代方案,理解《C#9 in a Nutshell》加粗内容

接口重实现替代方案通俗解释

核心逻辑是从基类设计层面提前规避接口重实现的需求,完全避开接口重实现的两个固有问题,两个方案对应两种接口实现场景分别处理:

方案1:隐式实现接口成员时,合适场景标记为virtual

隐式实现是最常用的接口实现方式:直接声明public的同名方法,无需加接口前缀,类实例和接口实例调用都走该方法逻辑。
这个方案本质是提前预留扩展口子:如果你预判后续子类可能需要修改该方法的逻辑,直接给隐式实现的方法加virtual关键字,后续子类直接通过override关键字重写即可,完全不需要重实现整个接口,还可以自由调用base.方法名()触发基类逻辑。

方案2:显式实现接口成员时,用「接口方法转发到保护虚方法」的模式

显式实现接口的特性是方法前加接口名前缀,方法默认是私有级别,只有转成接口类型才能调用,且不能直接加virtual关键字,本来子类完全没法直接重写,要改逻辑只能重实现接口,必然踩坑。
书里给出的模式逻辑非常简单:

  • 显式实现的接口方法不写任何业务逻辑,只做转发调用同一个类里的另一个protected virtual的同名方法,所有实际逻辑都放在这个保护虚方法里
  • 子类要改逻辑直接override这个保护虚方法即可,完全不需要碰接口
  • 当接口被调用时,显式实现的方法会自动调用已经被子类重写后的虚方法,完全符合预期,也支持子类调用基类方法

兜底方案

如果你的类从设计上就不需要被继承,直接给类加sealed关键字禁止继承,从根源上杜绝接口重实现的可能性。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:18:01