我希望下面用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();
}
}