C# 按参数名称进行扩展方法解析

C# 按参数名称进行扩展方法解析,c#,C#,在C中,参数名似乎可以参与扩展方法的解析。以下是一个例子: class Program { static void Main(string[] args) { var x = 1.Do1(b: 1); var x2 = 1.Do1(c: 1); Console.WriteLine(x); Console.WriteLine(x2); } } public static class Ext1 {

在C中,参数名似乎可以参与扩展方法的解析。以下是一个例子:

class Program
{
    static void Main(string[] args)
    {
        var x = 1.Do1(b: 1);

        var x2 = 1.Do1(c: 1);

        Console.WriteLine(x);
        Console.WriteLine(x2);
    }
}

public static class Ext1
{
    public static int Do1(this int a, int b)
    {
        return 1;
    }
}

public static class Ext2
{
    public static int Do1(this int a, int c)
    {
        return 2;
    }
}
在这个程序中,编译器能够推断对Do1的第一个调用是对Ext1.Do1的调用,第二个调用是对Ext2.Do1的调用,因为我指定了参数的名称


这是C语言的一个文档化特性吗?哪里我找不到它。

是的,它被记录在微软官方文档中,称为重载解析。 虽然这是一个普遍的事情,如,它适用于所有地方,所以你得到的结果是正常的

引述:

使用命名参数和可选参数会影响 以下方法:

如果每个方法、索引器或构造函数 其参数中的一个是可选的,或者通过名称或 定位到调用语句中的单个参数 参数可以转换为参数的类型

如果找到多个候选项,则重载 首选转换应用于显式指定的参数 明确规定。忽略可选参数的省略参数

如果两位候选人被认为同样优秀,则优先选择a 没有可选参数的候选参数 电话中遗漏了这些信息。这是一个普遍的结果 对于拥有较少资源的候选人,优先选择重载解决方案 参数


是的,它被记录在微软官方文档中,叫做过载解决。 虽然这是一个普遍的事情,如,它适用于所有地方,所以你得到的结果是正常的

引述:

使用命名参数和可选参数会影响 以下方法:

如果每个方法、索引器或构造函数 其参数中的一个是可选的,或者通过名称或 定位到调用语句中的单个参数 参数可以转换为参数的类型

如果找到多个候选项,则重载 首选转换应用于显式指定的参数 明确规定。忽略可选参数的省略参数

如果两位候选人被认为同样优秀,则优先选择a 没有可选参数的候选参数 电话中遗漏了这些信息。这是一个普遍的结果 对于拥有较少资源的候选人,优先选择重载解决方案 参数


正如@Haytam所指出的,这个过程就是调用。 在中的一节中对其进行了描述

首先,要找到最佳重载,必须找到所有可能重载的集合,称为适用函数成员。有很多规则可以找到重载。正如您可能猜到的,这两个方法是方法调用的有效候选方法。
但编译器会根据您的案例中的显式参数来选择更具体的参数。

正如@Haytam所指出的,这个过程就是调用。 在中的一节中对其进行了描述

首先,要找到最佳重载,必须找到所有可能重载的集合,称为适用函数成员。有很多规则可以找到重载。正如您可能猜到的,这两个方法是方法调用的有效候选方法。
但编译器会根据您的实例中的显式参数选择更具体的参数。

因为这两个方法具有完全相同的参数类型,所以我认为对这种情况有特别的支持。再想一想,简单地应用重载解析规则,这是一种正常情况。因为这两种方法具有完全相同的参数类型,所以我认为对这种情况有特别的支持。再想一想,简单地应用重载解析规则,这是正常情况。