💡
原文英文,约1000词,阅读约需4分钟。
📝
内容提要
在工作中,我遇到派生类未正确实现接口的问题,导致字典未填充。经过调查,发现是方法隐藏造成的。将派生类中的方法从“new”改为“override”后,问题得到解决。这让我理解了方法隐藏与重写的区别。
🎯
关键要点
- 在工作中遇到派生类未正确实现接口的问题,导致字典未填充。
- 调查发现是方法隐藏造成的,派生类未完全实现接口。
- 使用反射动态加载所有实现ICard接口的类。
- Arcanologist类和ArcanologistCore类分别实现GetCardId()方法。
- ArcanologistCore未出现在HighlightCards字典中,尽管它实现了ICardWithHighlight接口。
- 最初的解决方案是手动添加ICardWithHighlight接口,但不满意。
- 方法隐藏是指派生类定义与基类同名的方法而不使用override关键字。
- 方法重写使用override关键字,确保派生类的方法被调用。
- 解决方案是将ArcanologistCore中的GetCardId()方法改为override,确保正确实现接口。
- 修改后,问题得到解决,理解了方法隐藏与重写的区别。
❓
延伸问答
C#中的方法隐藏和重写有什么区别?
方法隐藏是指派生类定义与基类同名的方法而不使用override关键字,导致基类的方法不被调用;而方法重写使用override关键字,确保派生类的方法被调用。
如何解决派生类未正确实现接口的问题?
将派生类中的方法从'new'改为'override',确保正确实现接口。
在C#中,如何使用反射动态加载类?
可以使用Assembly.GetAssembly()方法获取类型,并通过反射检查类是否实现特定接口。
为什么ArcanologistCore类未出现在HighlightCards字典中?
因为ArcanologistCore中的GetCardId()方法使用了new关键字,导致隐藏了基类的方法,未正确实现接口。
如何确保派生类的方法被调用?
在派生类中使用override关键字来重写基类的方法,确保派生类的方法被调用。
在C#中,如何实现接口的多个实现?
可以通过创建多个类,每个类实现相同的接口,并在需要时使用反射动态加载这些类。
➡️