0

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

   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);

可以调用任何一个(假设我直截了当)。

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

谢谢

爱德华

4

3 回答 3

2

您可以使用命名参数。因此,当您调用方法时,请执行以下操作:

MyWhatsit.AddToolBarButton(commandName: "cmdname", text: "text", ...
于 2013-05-09T10:48:38.407 回答
1

如果两个候选者被判断为同样好,则优先考虑没有可选参数的候选者,在调用中省略了这些参数。这是对具有较少参数的候选者的重载解决方案的普遍偏好的结果。

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

这将调用有问题的第一个重载方法

MSDN 链接

于 2013-05-09T10:48:40.473 回答
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)
于 2013-05-09T10:50:03.757 回答