解决泛型运行时的重载问题

时间:2012-08-15 21:43:51

标签: c# c#-4.0 generics overloading

C#中是否可以将泛型传递给重载方法,并将其解析为方法的非泛型版本?例如:

class Program {
    static void Main(string[] args) {
        A a = new A();

        Process(a);
        Console.ReadLine();
    }

    static void Process<T>(T item) {
        Writer(item);
    }

    // Writer methods...

    static void Writer<T>(T item) {
        Console.WriteLine("Type: " + item.GetType());
        Console.WriteLine("You lose");
    }

    static void Writer(A item) {
        item.Write();
    }
}   

class A {
    public void Write() {
        Console.WriteLine("You found me!");
    }
}

此代码输出:

  

输入:Foo.A

     

你输了

我想看看:

  

你找到了我!

有没有办法做到这一点,或类似的东西?我正在使用C#4。

1 个答案:

答案 0 :(得分:5)

您可以使用dynamic将重载解析推迟到运行时:

static void Process<T>(T item)
{
    dynamic d = item;
    Writer(d);
}