为什么除了一个可选参数之外,还允许有两个相同的方法签名
本文关键字:两个 方法 一个 为什么 参数 | 更新日期: 2023-09-27 17:59:39
public static bool TryGetDbRow(DbConnection cnctn, string indexName = null)
public static bool TryGetDbRow(DbConnection cnctn)
如果没有字符串作为最后一个参数,就永远不会调用第一个。为什么除了一个可选参数之外,还允许有两个相同的方法签名?
这是Eric Lippert在他的博客上解释的http://blogs.msdn.com/b/ericlippert/archive/2011/05/16/optional-argument-corner-cases-part-three.aspx
创建具有可选参数的方法时,方法签名包括所有参数,包括任何可选参数。
因此,在您的示例中,这些方法有不同的签名——第一个有2个参数,第二个只有1个。当你只有第一个方法,并且你用1个参数调用该方法时,例如
TryGetDbRow("connection");
编译器将其更改为
TryGetDbRow("connection", null);
但是,当您添加不带可选参数的第二个方法时,编译器会为带有单个参数的方法找到匹配项,并且不会插入可选参数,因此会调用第二个。
从方法定义的角度来看,可选参数实际上并不是可选的。编译器只是对调用代码应用一些"语法糖",并为任何丢失的可选参数添加所有默认值。