C#方法解析度,long vs int
|
class foo
{
public void bar(int i) { ... };
public void bar(long i) { ... };
}
foo.bar(10);
我希望这段代码会给我一些错误,或者至少是一个警告,但事实并非如此……
调用什么版本的bar(),为什么?
没有找到相关结果
已邀请:
3 个回复
僻朵庙惩竣
是int常量,并且编译器将查找与输入变量最匹配的方法。要调用长版本,您需要指定一个长文字,如下所示:
这是埃里克·利珀特(Eric Lippert)发表的关于方法重载的更复杂版本的帖子。我会尝试解释一下,但是他做得更好,我可以做到:http://blogs.msdn.com/b/ericlippert/archive/2006/04/05/odious-ambiguous-overloads-part -one.aspx 来自C#4.0规范: 方法重载允许多个 同一类中的方法具有 只要它们具有唯一性,就使用相同的名称 签名。编译时 调用重载方法, 编译器使用重载解析 确定具体方法 调用。重载分辨率找到 一种最适合的方法 参数,否则报告错误 可以找到一个最佳匹配。的 以下示例显示了重载 有效的分辨率。的评论 Main方法中的每个调用 显示实际上是哪种方法 调用。
如示例所示, 始终可以选择方法 明确地将参数转换为 确切的参数类型和/或 显式提供类型参数。
赣借
驮帽俺篮号
控制权将转至
范围
最大值
要么
如果我们将值超过2147483648,10ѭ将获得控制权