我有一个对象o
,它在运行时保证是三种类型之一A
,B
或C
,所有这些都实现一个公共接口I
。我可以控制I
,但不能A
,,B
或C
。(因此我可以使用一个空的标记接口,或者通过使用接口以某种方式利用类型的相似性,但我不能添加新方法或更改类型中的现有方法。)
我也有一系列的方法MethodA
,,MethodB
和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# 进行调度,而不是自己手动进行。这可以做到吗?当然,天真的直接方法不起作用:
无法解析方法“方法(对象)”。候选人是:
- 无效方法(A)
- 无效方法(B)
- 无效方法(C)