编程语言
首页 > 编程语言> > c# – 除了可选参数之外,为什么允许有2个相同的方法签名?

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