假设我有三种方法:
void Foo(MemoryStream v) {Console.WriteLine ("MemoryStream");}
void Foo(Stream v) {Console.WriteLine ("Stream");}
void Foo(object v) {Console.WriteLine ("object");}
我调用Foo
传递开放泛型类型的第一个参数的方法:
void Bar<T>()
{
Foo(default(T)); //just to show the scenario
//default(T) or new T() doesn't make a difference, null is irrelevant here
}
我想调用重载,所以我用以下MemoryStream
方法关闭泛型类型的方法:Bar
MemoryStream
Bar<MemoryStream>();
但是object
调用了重载。如果我将通用约束添加到 Foo 签名where T : Stream
,则Stream
调用该版本。
MemoryStream
有没有办法根据开放的泛型类型将方法调用调度到重载T
?
我不想使用Delegate.CreateDelegate
其他反射 API。就在 C# 语言中。我可能在语言本身中遗漏了一些东西。
尝试使用值类型作为封闭泛型类型并使用静态方法的这种情况。