考虑以下代码:
static void Main(string[] args)
{
Get<Student>(new Student());
System.Console.Read();
}
public static void Get<T>(T person)
{
Console.WriteLine("Generic function");
}
public static void Get(Person person)
{
person.Show();
}
这是我的人员类:
class Person
{
public void Show()
{
Console.WriteLine("I am person");
}
}
class Student : Person
{
public new void Show()
{
Console.WriteLine("I am Student");
}
}
我调用Get
方法并将学生对象传递给该方法。代码如下:
Get<Student>(new Student());
所以我得到了这个:
通用函数
。但当我像这样调用Get
时: Get(new Student());
我希望这个Get(Person person)
会被调用,但是会再次调用:Get<T>(T person)
。为什么编译器会有这种行为?
Get<Student>(Student)
-这是一个精确匹配;Get(Person)
不是精确匹配,因为你传递的是一个学生,而不是一个人。 - Marc Gravell