c# - 为什么 C# 编译器不会对具有默认参数的方法感到困惑?

标签 c# ambiguous default-parameters

<分区>

为什么 C# 编译器不会对具有默认参数的方法感到困惑?

下面代码中的SayHello()可以引用:

  • 问好()
  • SayHello(字符串 arg1 = null)
  • SayHello(字符串 arg1 = null, 字符串 arg2 = null)
  • SayHello(字符串 arg1 = null,字符串 arg2 = null,字符串 arg3 = null)

但是这段代码编译成功,没有任何不明确的错误。

class Program
{
    private static void SayHello()
    {
        Console.WriteLine("Hello 1");
        return;
    }

    private static void SayHello(string arg1 = null)
    {
        Console.WriteLine("Hello 2");
        return;
    }

    private static void SayHello(string arg1 = null, string arg2 = null)
    {
        Console.WriteLine("Hello 3");
        return;
    }

    private static void SayHello(string arg1 = null, string arg2 = null, string arg3 = null)
    {
        Console.WriteLine("Hello 3");
        return;
    }

    private static void Main(string[] args)
    {
        SayHello(); // SayHello() invoked, but SayHello(string arg1 = null) not invoked.
        SayHello("arg1");
        SayHello("arg1", "arg2", "arg3");

        // Output is:
        // Hello 1
        // Hello 2
        // Hello 3

        return;
    }
}

最佳答案

编译器将首先选择没有任何可选参数的方法。因此,就编译器而言,您的代码没有歧义。

关于c# - 为什么 C# 编译器不会对具有默认参数的方法感到困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16569693/

相关文章:

c# - 封装网络协议(protocol)

c++ - 多重继承引起的C++拷贝构造函数调用不明确

javascript - 跳过参数以保留 JavaScript 中的默认值

c# - DataGridView 单元格的透明选择背景色

c# - c# 中 uint 的位移位

c# - 动态、对象、变量

class - 为什么 Haskell 说这是模棱两可的?

c++ - 如何解决这个不明确的模板构造函数调用?

delphi - FireDAC - 如何使用默认参数执行存储过程?

Kotlin 默认参数排序