diesen Code vor:Aufruf generische Methode in 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();
}
Diese meine Person Klasse:
class Person
{
public void Show()
{
Console.WriteLine("I am person");
}
}
class Student : Person
{
public new void Show()
{
Console.WriteLine("I am Student");
}
}
ich Get
nennen und übergeben Schüler zum method.Like dies:
Get<Student>(new Student());
So bekomme ich das: Generic function
. Aber wenn ich Get
so anrufen:
Get(new Student());
Ich erwarte, dass diese Get(Person person)
nennen called.but wieder zu: Get<T>(T person)
. Warum hat Compiler dieses Verhalten?
Schauen Sie [hier] (http://StackOverflow.com/Questions/3679562/generic-methods-and-method-overloading), die Frage ist im Grunde die gleiche – Save
Die genauen Regeln für die Überlastung Vorrang sind kompliziert und in der Spezifikation : aber ich vermute, es ruft tatsächlich "Get (Student)" - was eine genaue Übereinstimmung ist; 'Get (Person)' ist * nicht * eine exakte Übereinstimmung, da Sie einen Student und keine Person übergeben –