.Net为什么允许诸如此类的模棱两可的方法

轻松编码

当前,我正在使用.Net 3.5,所以请让我知道它是否已在更高版本中修复。

目前,我有两种具有以下签名的方法:

void Method1(string, string)
void Method1(string, params string[])

如果我打这样的电话

Method1("test1", "test2")

编译器如何知道要调用的方法?为什么.Net允许这样做?

我假设在IL中,结果代码是不同的,因此可以使用,但不应这样,因为您会得到意想不到的结果。是否有充分的理由允许这样做?

提前致谢。

乔恩·斯基特

编译器如何知道要调用的方法?

它遵循C#语言规范中列出的重载解决规则。特别是在7.5.3.2节中(查看C#4规范,但我相信C#5在此处具有相同的编号)-“更好的功能成员”:

如果参数类型的顺序是等效的,则应用以下平局决胜规则,以确定更好的函数成员:unesdoc.unesco.org unesdoc.unesco.org

  • ...
  • 否则,如果M P是适用在其正常形式和M Q具有params阵列和仅在其膨胀形式是适用的,则M P大于M更好Q

因此,在您的示例中,这将称为第一个重载。

为什么.Net允许这样做?

因为它在各种情况下(例如Console.WriteLine开始)都非常有用

我假设在IL中,结果代码是不同的,因此可以使用,但不应这样,因为您会得到意想不到的结果。

如果您不希望C#编译器遵循其规范,则只会得到意想不到的结果。在这种情况下,几乎任何行为都可能是意外的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么此方法重载模棱两可?

来自分类Dev

为什么isnan模棱两可?如何避免?

来自分类Dev

为什么这样模棱两可?

来自分类Dev

为什么IDEA导入模棱两可的Java

来自分类Dev

为什么这个EBNF语法模棱两可?

来自分类Dev

为什么这个refname模棱两可

来自分类Dev

为什么这两种方法模棱两可

来自分类Dev

为什么编译器会给出模棱两可的方法调用错误?

来自分类Dev

编译时错误:调用重载方法时模棱两可。为什么?

来自分类Dev

编译时错误:调用重载方法时模棱两可。为什么?

来自分类Dev

模棱两可的varargs方法

来自分类Dev

在将重载与类型提升配合使用时,为什么方法调用是模棱两可的?

来自分类Dev

为什么两个功能不是模棱两可的?

来自分类Dev

为什么Array和Integer构造函数模棱两可

来自分类Dev

为什么以下运算符重载是模棱两可的?

来自分类Dev

为什么不能推断类型类约束而变得模棱两可?

来自分类Dev

无功能覆盖的多重继承。为什么模棱两可

来自分类Dev

为什么当类型变量应该模棱两可时才推断出Integer?

来自分类Dev

在Haskell中,即使启用AllowAmbiguousTypes,为什么类型仍然模棱两可?

来自分类Dev

为什么这个ANTLR4语法模棱两可?

来自分类Dev

为什么在加入表时列变得模棱两可?

来自分类Dev

为什么对模版化函数有一个模棱两可的要求?

来自分类Dev

为什么命名空间中的自由函数是模棱两可的?

来自分类Dev

CDI与@Produces的模棱两可的依赖关系-为什么?

来自分类Dev

无功能覆盖的多重继承。为什么模棱两可

来自分类Dev

为什么这个整数隐式转换是模棱两可的?

来自分类Dev

从Object继承的方法变得模棱两可

来自分类Dev

xpath [last()]方法中的模棱两可的错误

来自分类Dev

该方法对于错误类型是模棱两可的

Related 相关文章

  1. 1

    为什么此方法重载模棱两可?

  2. 2

    为什么isnan模棱两可?如何避免?

  3. 3

    为什么这样模棱两可?

  4. 4

    为什么IDEA导入模棱两可的Java

  5. 5

    为什么这个EBNF语法模棱两可?

  6. 6

    为什么这个refname模棱两可

  7. 7

    为什么这两种方法模棱两可

  8. 8

    为什么编译器会给出模棱两可的方法调用错误?

  9. 9

    编译时错误:调用重载方法时模棱两可。为什么?

  10. 10

    编译时错误:调用重载方法时模棱两可。为什么?

  11. 11

    模棱两可的varargs方法

  12. 12

    在将重载与类型提升配合使用时,为什么方法调用是模棱两可的?

  13. 13

    为什么两个功能不是模棱两可的?

  14. 14

    为什么Array和Integer构造函数模棱两可

  15. 15

    为什么以下运算符重载是模棱两可的?

  16. 16

    为什么不能推断类型类约束而变得模棱两可?

  17. 17

    无功能覆盖的多重继承。为什么模棱两可

  18. 18

    为什么当类型变量应该模棱两可时才推断出Integer?

  19. 19

    在Haskell中,即使启用AllowAmbiguousTypes,为什么类型仍然模棱两可?

  20. 20

    为什么这个ANTLR4语法模棱两可?

  21. 21

    为什么在加入表时列变得模棱两可?

  22. 22

    为什么对模版化函数有一个模棱两可的要求?

  23. 23

    为什么命名空间中的自由函数是模棱两可的?

  24. 24

    CDI与@Produces的模棱两可的依赖关系-为什么?

  25. 25

    无功能覆盖的多重继承。为什么模棱两可

  26. 26

    为什么这个整数隐式转换是模棱两可的?

  27. 27

    从Object继承的方法变得模棱两可

  28. 28

    xpath [last()]方法中的模棱两可的错误

  29. 29

    该方法对于错误类型是模棱两可的

热门标签

归档