如何限制方法参数为MyAbstractClass子类且实现IMyInterface接口?
问题:如何让方法仅接受同时继承抽象类并实现接口的对象
现有方法
我有如下方法:
public MyData GetTransformedInfo(MyAbstractClass obj) { // Calculate and return relevant stuff }
需求背景
MyAbstractClass可能存在子类及后代类,同时我有一个IMyInterface接口,许多类(包括但不限于MyAbstractClass的部分子类及其后代)都会实现它。现在需要修改上述方法,使其仅接受同时是MyAbstractClass后代且实现IMyInterface的对象。
我曾尝试类似GetTransformedInfo(MyAbstractClass:IMyInterface obj)的写法,但显然C#不支持这种语法。
考虑过用反射做运行时检查,但这种方式有诸多弊端:无法在编译期强制约束、性能损耗大、仅做兼容性检查就会产生内存分配。
已想到的方案
目前想到的方案是新增一个中间抽象类,让目标类继承它:
public abstract class MyAbstractClassWithIMyInterface : MyAbstractClass, IMyInterface {} public MyData GetTransformedInfo(MyAbstractClassWithIMyInterface obj) { // Calculate and return relevant stuff }
疑问
除了这种方案外,还有其他可行的实现方式吗?另外,如果是要求方法接受同时实现两个接口的对象,是不是也只能用类似的中间接口/类方案?这已经是最优解了吗?
内容的提问来源于stack exchange,提问作者Bestknighter
相关产品推荐
相关产品推荐

