8
考慮以下代碼:呼叫在C#泛型方法
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();
}
這是我的Person類:
class Person
{
public void Show()
{
Console.WriteLine("I am person");
}
}
class Student : Person
{
public new void Show()
{
Console.WriteLine("I am Student");
}
}
我打電話Get
並通過學生對method.Like這樣的:
Get<Student>(new Student());
所以我得到這個:Generic function
。但是當我打電話Get
像這樣:
Get(new Student());
我希望這個Get(Person person)
被稱爲,但再次調用:Get<T>(T person)
。 爲什麼編譯器有這種行爲?
Look [here](http://stackoverflow.com/questions/3679562/generic-methods-and-method-overloading),問題基本相同 – Save
過載優先的確切規則很複雜,並且在規範中:但我懷疑它實際上是調用'Get(Student)' - 這完全匹配; 'Get(Person)'不* *完全匹配,因爲您傳遞的是學生,而不是個人 –