【发布时间】:2010-05-12 11:46:43
【问题描述】:
我有一个对象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)
【问题讨论】:
-
如果有 D、E 和 F 类型,它们是否也都需要该方法的实现?
-
@Jason:大概是的,但在我的特殊情况下,其他此类类型不太可能存在。
-
顺便说一句:+1 对一个很好且问得很好的问题。很明显,您知道自己的选择并了解良好的设计实践。