考虑以下代码:
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();
}
Run Code Online (Sandbox Code Playgroud)
这是我的人类:
class Person
{
public void Show()
{
Console.WriteLine("I am person");
}
}
class Student : Person
{
public new void Show()
{
Console.WriteLine("I am Student");
}
}
Run Code Online (Sandbox Code Playgroud)
我打电话Get给学生并通过该方法.就像这样:
Get<Student>(new Student());
Run Code Online (Sandbox Code Playgroud)
所以我明白了:Generic function但是我打电话的时候Get是这样的:
Get(new Student());
Run Code Online (Sandbox Code Playgroud)
我希望这Get(Person person)可以被调用Get<T>(T person).但是再次打电话:.为什么编译器有这种行为?
Ond*_*cek 12
我可以推荐Jon Skeet的书C#in Depth(现在的第二版),第9.4.4章.我改变了文字以适应你的情况.
选择正确的重载方法
此时,编译器会考虑从Student转换为Student,从Student转换为Person.从任何类型到自身的转换被定义为优于任何到不同类型的转换,因此对于此特定调用,使用T作为Student方法的Get(T x)优于Get(Person y).
书中有更多的解释,我至少强烈建议你仔细阅读.
| 归档时间: |
|
| 查看次数: |
450 次 |
| 最近记录: |