问题 方法重载和空值[重复]


可能重复:
C#:将null传递给重载方法 - 调用哪个方法? 

考虑以下两种方法:

void Method(object obj)  { Console.WriteLine("object"); }
void Method(int[] array) { Console.WriteLine("int[]"); }

当我尝试打电话时:

Method(null);

在Visual Studio 2008 SP1中,我得到了 int[]

为什么是这样?


11318
2017-11-22 15:14


起源

他可能会问为什么编译器会支持这种重载。 - Vlad
他的问题是为什么重载解析为采用int数组而不是采用对象的方法解析null。 - Ben Robinson
看到这个问题: stackoverflow.com/q/719546/25727 - Jan
重复: stackoverflow.com/questions/719546/... - Abdul Munim


答案:


它是重载分辨率的产物。你的论点, null,可以转换为两者 object 和 int[]。因此,编译器选择最具体的版本,因为 int[] 比具体更具体 object


11
2017-11-22 15:18



+1:“更具体”被定义为“an int[] 可以隐含地转换为 object,但是 object 不能隐含地投入到 int[]“。 - StriplingWarrior


因为int []比object更具体,所以将忽略带有object-parameter的方法。如果要调用Method(“Some string”),将调用带有object-parameter的方法。


1
2017-11-22 15:18