同名函式的 帶 params 引數 與 不帶 params 引數的執行優先順序

iDotNetSpace發表於2009-10-13

看下面程式碼,編譯會不會報錯,如果不報錯,執行的結果是啥?

 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 引數的函式。

這個邏輯是編譯時確定的,執行時根本不考慮這個問題。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-616451/,如需轉載,請註明出處,否則將追究法律責任。

相關文章