我有一个对象o
在运行时保证是三种类型之一A
, B
, or C
,所有这些都实现了一个通用接口I
。我可以控制I
, 但不是A
, B
, or C
。 (因此,我可以使用空标记接口,或者以某种方式通过使用接口来利用类型中的相似性,但我无法添加新方法或更改类型中的现有方法。)
我也有一系列的方法MethodA
, MethodB
, and MethodC
。运行时类型为o
被查找然后用作这些方法的参数。
public void MethodA(A a) { ... }
public void MethodB(B b) { ... }
public void MethodC(C c) { ... }
使用此策略,现在必须对类型进行检查o
以确定应调用哪个方法。相反,我只想拥有三个重载方法:
public void Method(A a) { ... } // these are all overloads of each other
public void Method(B b) { ... }
public void Method(C c) { ... }
现在我让 C# 进行调度,而不是我自己手动进行。这可以做到吗?当然,这种简单直接的方法是行不通的:
无法解析方法“方法(对象)”。候选人是:
如果您可以重构它,请将方法移至接口并让每个类都有其实现:
I i = o as I;
i.Method();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)