Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中调用泛型方法#_C# - Fatal编程技术网

C# 在c中调用泛型方法#

C# 在c中调用泛型方法#,c#,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.

考虑以下代码:

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();
}
我调用
Get
并将学生传递给该方法。如下所示:

 Get<Student>(new Student());
我希望这个
Get(Person)
会被调用。但是再次调用:
Get(T Person)

为什么编译器会有这种行为

我可以向您推荐Jon Skeet的书《C#Depth》(现在是第二版),第9.4.4章。我修改了文本以适应你的情况

选择正确的重载方法

此时,编译器将考虑从学生到用户的转换 学生,从学生到人。从任何类型到 它本身被定义为比任何转换到不同 类型,因此使用T作为学生方法的Get(tx)比 为此特定呼叫获取(人员y)


书中有更多的解释,我至少可以强烈建议你仔细阅读。

看,问题基本上是一样的重载优先级的确切规则很复杂,在规范中:但我怀疑它实际上调用了
Get(Student)
,这是一个精确匹配
Get(Person)
不完全匹配,因为您通过的是学生,而不是个人
 Get<Student>(new Student());
 Get(new Student());