标签:c language-design optional-parameters
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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。