解析传递的可变参数数量时有哪些规则params?
假设我有代码:
public void Method(params object[] objects) { }
public void Method(IMyInterface intf, params object[] objects) { }
Run Code Online (Sandbox Code Playgroud)
Method(a, b, c)如果a是IMyInterface,如何解决?我可以确定,C#总是会尝试选择大多数匹配的重载吗?
Jon*_*Jon 11
这可以通过C#语言规范来回答:
7.5.3.1适用的功能成员
[...]
否则,如果MP以其正常形式适用且MQ具有params数组并且仅适用于其扩展形式,则MP优于MQ.
否则,如果MP具有比MQ更多的声明参数,则MP优于MQ.如果两个方法都有
params数组并且仅适用于它们的扩展形式,则会发生这种情况.[...]
在您的示例中,两个重载仅适用于其扩展形式.由于第二个具有更多声明的参数,因此会更好.
在规范的上下文中,一个重载优于所有其他重载意味着编译器选择它来绑定调用,正如在讨论的示例中所发生的那样(如果没有一个重载优于所有其他重载,则结果是由于模糊而导致的编译时错误).
| 归档时间: |
|
| 查看次数: |
193 次 |
| 最近记录: |