同名函式的 帶 params 引數 與 不帶 params 引數的執行優先順序
看下面程式碼,編譯會不會報錯,如果不報錯,執行的結果是啥?
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- js中同名變數或者引數的優先順序JS變數
- vue3 setup裡獲取query params路由攜帶的引數Vue路由
- out,ref,params引數傳遞
- NLS引數優先順序解析
- HttpClient和HttpGet 引數的優先順序HTTPclient
- C/C++多引數函式引數的計算順序與壓棧順序C++函式
- 封裝帶引數的函式封裝函式
- 淺談C#可變引數paramsC#
- fixtrue基礎之params引數實現簡單引數化
- Oracle帶引數的自定義函式Oracle函式
- c# 方法引數(傳值,傳引用,ref,out,params,可選引數,命名引數)C#
- javascript函式引數和函式內同名變數的關係JavaScript函式變數
- python 函式引數的傳遞(引數帶星號的說明)Python函式
- EXTJS 建構函式帶引數JS函式
- nls引數、環境變數以及函式等起作用的順序!變數函式
- sendEmail帶的引數AI
- 函式宣告與變數宣告的提升機制優先順序問題函式變數
- Oracle RAC引數設定優先順序別問題分析Oracle
- js函式和變數的執行順序【易錯】JS函式變數
- 函式定義、函式的引數、函式的預設引數函式
- 警惕執行緒的優先順序執行緒
- C# 帶引數帶互鎖多執行緒呼叫方法C#執行緒
- job中執行帶有引數的procedure 時的寫法
- spring呼叫帶引數的oracle函式應注意的問題SpringOracle函式
- http params規範中,允許一個引數多次出現嗎?HTTP
- c#.net中引數修飾符ref,out ,params得區別C#
- Java之執行緒的優先順序Java執行緒
- ajax回撥函式執行順序帶來的同步非同步問題函式非同步
- java執行緒優先順序Java執行緒
- 引數匹配順序——Python學習之引數(三)Python
- Mysql關於my.cnf引數檔案的讀取順序及各項配置的覆蓋優先順序MySql
- 教你如何使用Springboot注入帶引數的建構函式Spring Boot函式
- mysql 多個引數選項檔案my.cnf優先順序研究MySql
- 函式引數 引數定義函式型別函式型別
- 方法(函式)的定義與引數函式
- 【函式引數】Oracle 11g中使用“=>”顯式指明函式引數名與引數值的對應關係函式Oracle
- setTimeout()函式第一個引數帶引號報錯原因介紹函式
- C++行內函數、函式過載與函式預設引數C++函數函式