Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何消除重载方法的歧义_C#_Overloading - Fatal编程技术网

C# 如何消除重载方法的歧义

C# 如何消除重载方法的歧义,c#,overloading,C#,Overloading,我正在使用以下方法签名的框架中工作 public ImageLinkButton AddToolBarButton(string commandName, string text, string toolTip, string imageUrl, string confirmMessage, bool defineID = false) 我发现我需要用一个额外的bool参数来重载它 public ImageLinkButton AddToolBarButton(string com

我正在使用以下方法签名的框架中工作

   public ImageLinkButton AddToolBarButton(string commandName, string text, string toolTip, string imageUrl, string confirmMessage, bool defineID = false)
我发现我需要用一个额外的bool参数来重载它

   public ImageLinkButton AddToolBarButton(string commandName, string text, string toolTip, string imageUrl, string confirmMessage, bool causesValidation, bool defineID = false)
然而,在使用中,我看不到如何确保实际调用了哪个方法,因为调用

MyWhatsit.AddToolBarButton("cmdname", "text", "toolTip", "URL", "confirm", true);
可以调用其中一个(假设我的头是直的)

我很确定我做错了什么,但我看不出是什么

谢谢

爱德华,你可以用。因此,当调用方法时,请执行以下操作:

MyWhatsit.AddToolBarButton(commandName: "cmdname", text: "text", ...
你可以用。因此,当调用方法时,请执行以下操作:

MyWhatsit.AddToolBarButton(commandName: "cmdname", text: "text", ...
如果两个候选者被判定为同等优秀,则优先选择没有可选参数的候选者 调用中忽略了参数。这是一个普遍的结果 对于拥有较少资源的候选人,优先选择重载解决方案 参数

因此,如果您像
MyWhatsit.AddToolBarButton(“cmdname”、“text”、“toolTip”、“URL”、“confirm”、true)那样调用

这将调用讨论中给出的第一个重载方法

如果两个候选者被判定为同等优秀,则优先选择没有可选参数的候选者 调用中忽略了参数。这是一个普遍的结果 对于拥有较少资源的候选人,优先选择重载解决方案 参数

因此,如果您像
MyWhatsit.AddToolBarButton(“cmdname”、“text”、“toolTip”、“URL”、“confirm”、true)那样调用

这将调用讨论中给出的第一个重载方法


最快的方法是交换参数的顺序,这样就不必给出bool作为这两个参数的最后一个参数:

编辑:

public ImageLinkButton AddToolBarButton(string commandName, 
                                        string text, 
                                        string toolTip, 
                                        string imageUrl, 
                                        string confirmMessage, 
                                        bool defineID = false)

public ImageLinkButton AddToolBarButton(string commandName, 
                                        string text, 
                                        string toolTip, 
                                        string imageUrl, 
                                        bool causesValidation,//swap this 
                                        string confirmMessage, //and this
                                        bool defineID = false)

最快的方法是交换参数的顺序,这样就不必将bool作为这两个参数的最后一个参数:

编辑:

public ImageLinkButton AddToolBarButton(string commandName, 
                                        string text, 
                                        string toolTip, 
                                        string imageUrl, 
                                        string confirmMessage, 
                                        bool defineID = false)

public ImageLinkButton AddToolBarButton(string commandName, 
                                        string text, 
                                        string toolTip, 
                                        string imageUrl, 
                                        bool causesValidation,//swap this 
                                        string confirmMessage, //and this
                                        bool defineID = false)

可选参数必须是定义中的最后一个。我知道。我指的是第二个方法,它有一个必需的bool参数。如果将其与所需字符串之一交换,则会创建一个明确的方法。这很令人困惑,因为您声明不必将bool作为这两个字符串的最后一个参数。这将是从调用方的角度进行的。定义仍然需要bool作为最后一个参数,因为它是可选的。显示一些代码。谢谢Juann-这将为我排序。可选参数必须是定义中的最后一个。我知道。我指的是第二个方法,它有一个必需的bool参数。如果将其与所需字符串之一交换,则会创建一个明确的方法。这很令人困惑,因为您声明不必将bool作为这两个字符串的最后一个参数。这将是从调用方的角度进行的。定义仍然需要bool作为最后一个参数,因为它是可选的。显示一些代码。谢谢Juann-这将为我排序。我喜欢下面的命名参数想法。您还可以重命名方法?。。或者为causesValidation指定一个默认值,并在没有它的情况下删除重载…我喜欢下面的命名参数思想。您还可以重命名方法?。。或者指定causesValidation的默认值,并在不使用该值的情况下删除重载…添加了链接,从重载解析部分复制了文本添加了链接,从重载解析部分复制了文本