在 c# 中调用泛型方法
本文关键字:泛型方法 调用 | 更新日期: 2023-09-27 18:32:28
请考虑以下代码:
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());
所以我得到这个:Generic function
.但是当我这样打电话给Get
时:
Get(new Student());
我希望这个Get(Person person)
被调用。但再次调用:Get<T>(T person)
。为什么编译器有这种行为?
我可以参考Jon Skeet的书C# in Depth(现在第二版),章节编号9.4.4。我更改了文本以适应您的情况。
选择正确的重载方法
此时,编译器会考虑从学生到 学生,以及从学生到个人。从任何类型到 本身被定义为比任何转换为不同的 类型,因此 Get(T x) 将 T 作为学生方法优于 获取(人员 y)用于此特定调用。
书中还有一点解释,我至少可以强烈建议你仔细阅读。