如何消除重载方法的歧义

时间:2013-05-09 10:44:32

标签: c# overloading

我正在使用以下方法签名

的框架中工作
   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);

可以调用(假设我的头直立)。

我很确定我做错了什么,但我看不清楚!

由于

爱德华

3 个答案:

答案 0 :(得分:2)

您可以使用named parameters。因此,当您调用方法时,请执行以下操作:

MyWhatsit.AddToolBarButton(commandName: "cmdname", text: "text", ...

答案 1 :(得分:1)

  

如果两个候选人被判断为同样好,则优先选择没有可选参数的候选人   调用中省略了参数。这是一般的结果   对于拥有较少的候选人,重载决议的偏好   参数。

所以,如果你打电话给MyWhatsit.AddToolBarButton("cmdname", "text", "toolTip", "URL", "confirm", true);

这将调用问题

中给出的First重载方法

MSDN Link

答案 2 :(得分:0)

最快的是交换参数的顺序,这样你就不必将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)