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

.NET7静态抽象属性:实现子接口后类仍需显式实现成员?

为什么T2实现IRegister8Bit后还得显式实现BitsSize?

核心问题出在静态接口成员的继承规则上,你在IRegister8Bit里用static new定义的BitsSize,只是隐藏了父接口IRegister的同名静态成员,并没有真正完成IRegister对BitsSize的抽象实现要求。

具体来说:

  • 类实现接口时,必须满足该接口及其所有父接口的全部静态抽象成员。IRegister8Bit继承自IRegister,所以T2作为实现类,得同时搞定IRegister要求的RegisterCode和BitsSize两个静态成员。
  • 你写的public static new int BitsSize => 8;,只是在IRegister8Bit这个接口层面重新定义了一个同名成员,它并没有替代或完成IRegister里BitsSize的抽象实现。编译器不认这个,还是会认为IRegister的BitsSize没被实现。

怎么改?

要让IRegister8Bit的实现类自动继承BitsSize的实现,得让IRegister8Bit显式实现IRegister的静态抽象成员,别用new隐藏:

public interface IRegister8Bit : IRegister
{
    static int IRegister.BitsSize => 8;
}

改完之后,T2实现IRegister8Bit时,就会自动继承这个IRegister.BitsSize的实现,不用自己再定义了。运行代码的话,Test<T2>()会输出0x07和8,刚好符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:32:35