看下面代码,编译会不会报错,如果不报错,执行的结果是啥?
using System; class Program { static void Main(string[] args) { Console.WriteLine(GetIP()); Console.WriteLine(GetIP("a")); Console.WriteLine(GetIP("a", "b")); Console.WriteLine(GetIP("a", "b","c")); Console.ReadLine(); } public static string GetIP(params string[] ipArr) { return "3"; } public static string GetIP(string ip) { return "2"; } public static string GetIP() { return "1"; } }
答案:
编译不会报错,执行结果:
1
2
3
3
使用ILdasm察看,显然,params 是一个语法糖,编译时,如果发现有完全匹配的函数,就优先调用完全匹配的函数,否则就调用带params 参数的函数。
这个逻辑是编译时确定的,执行时根本不考虑这个问题。