我有以下场景:
class Foo { }
class Foo<T> : Foo { }
然后有两种方法。
void DoStuff(Foo foo)
{
DoStuffImpl(foo);
}
void DoStuffImpl(Foo foo)
{
Console.WriteLine("A");
}
void DoStuffImpl<T>(Foo<T> foo)
{
Console.WriteLine("B");
}
void Main()
{
DoStuff(new Foo<int>()); // prints A
}
(注意,以下代码是在浏览器中编写的,但描述的是我面临的情况)
如何调用泛型方法并输出B?
如果没有反射,是否可以完成这项任务?我有一些通过反射实现的想法,但如果存在更简洁的解决方案,我将非常感激。
注意:我不能将DoStuff
设置为泛型,因为它会与WCF产生冲突,开放泛型类型不被允许。
Foo<T>
上操作产生的结果与在Foo
上操作产生的结果显著不同,那么您可能违反了透明度。DoStuff(Foo)
应该能够操作任何类型的Foo
,这意味着从Foo
派生的所有类都应该按照DoStuff(foo)
所依赖的Foo
指定的行为执行。 实质上,您正在尝试在Foo
和Foo<T>
的实现之外为DoStuff
方法提供多态行为。 您可能需要重新考虑导致此问题的责任分离。 - Dan Bryant