Dar*_*der 8 c# compiler-construction
我有以下代码:
[TestMethod]
public void TestFoo()
{
Foo(null);
}
private void Foo (object bar)
{
Console.WriteLine("Foo - object");
}
private void Foo (string bar)
{
Console.WriteLine("Foo - string");
}
Run Code Online (Sandbox Code Playgroud)
当我运行测试"TestFoo()"时,控制台输出为"Foo - string".编译器如何决定调用哪种方法?
Jon*_*eet 16
它应用"更好的转换"规则(C#3规范的7.4.3.3)作为重载决策的一部分(一般见7.4.3节).
在这种情况下,基本上是转换string为object,但不是转换object为string.遵守规则,这意味着从转换null到string比从一个更好的null来object,所以用超负荷string使用的参数.
当涉及以下因素时,过载分辨率会变得非常复杂:
params)增添了乐趣基本上,重载可以是一个真正的蠕虫 - 在可能的情况下,设计重载,以便只有其中一个将成为任何给定方法调用的有效目标,这样您就不必担心详细的规则.
| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |