c# – 除了可选参数之外,为什么允许有2个相同的方法签名?
作者:互联网
public static bool TryGetDbRow(DbConnection cnctn, string indexName = null)
public static bool TryGetDbRow(DbConnection cnctn)
没有字符串作为最后一个参数,将不会调用第一个.
除了可选参数之外,为什么允许使用2个相同的方法签名?
解决方法:
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);
但是,当您添加第二个方法而没有可选参数时,编译器会使用单个参数找到该方法的匹配项,并且不会插入可选参数,因此会调用第二个方法.
从方法定义的角度来看,可选参数实际上不是可选的.编译器只是将一些“语法糖”应用于调用代码,并为任何缺少的可选参数添加所有默认值.
标签:c,language-design,optional-parameters 来源: https://codeday.me/bug/20190628/1316427.html