.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
相关产品推荐
相关产品推荐

