键入的泛型不会使用正确的param类型调用方法,始终使用object调用

时间:2015-09-17 14:44:40

标签: c# generics

我希望下面用int调用重载的write方法,因为Test被键入TValue(实例上是int类型)。但由于某种原因,它只是继续调用object写方法签名。

有谁知道为什么会这样,我怎么能在没有强制转换的情况下调用正确的方法。

class Test<TValue>
{
    private readonly Func<TValue> _valueExpression;

    public Test(Func<TValue> valueExpression)
    {
        _valueExpression = valueExpression;
    }

    public void Write(Writer writer)
    {
        writer.Write(_valueExpression.Invoke());
    }
}

class Writer
{
    public void Write(int val)
    {
        Console.WriteLine("Wrote int");
    }

    public void Write(object val)
    {
        Console.WriteLine("Wrote object");
    }
}

class Program
{
    static void Main(string[] args)
    {
        var test = new Test<int>(() => 4);

        test.Write(new Writer());
        // always returns "wrote object"

        Console.ReadLine();
    }
}

0 个答案:

没有答案