C#中命名引數和可選引數
呼叫方法時,變數名不需要新增到呼叫中。比如有如下的方法用於移動矩形並在移動之後設定他的寬和高:
public void MoveAndResize(int x,int y,int width,int height)
有兩種呼叫方式:1. MoveAndResize(10,20,30,40);
2. MoveAndResize(x: 10,y: 20,width: 30,height: 40);
第一種方式是常用的也非常簡單,但是從呼叫上看不出來所用引數的含義。
第二種方式採用了命名引數,也就是:引數名 : value 的形式,這種方式可以直觀的體現初始化什麼引數,還可以更改呼叫順序,比如:
MoveAndResize(y: 20,x: 10,width: 30,height: 40);
但是第二種方式用起來比較繁瑣,實際在編輯器中也有程式碼提示等相關的功能,比如滑鼠放在方法名上,原方法的相關的定義都出現了。
不過命名引數的實際用處在於他和可選引數的結合使用。可選引數:顧名思義,在方法呼叫的時候可以不用給該引數賦值。比如下面的方法有一個引數:isTest,當 isTest 為 true 時,進行某些操作:
public void Test(int a , bool isTest = false)
在呼叫的時候當我不需要與第二個引數相關功能的時候可以不用賦值:
Test(10);
可選引數使用:必須要為該引數設定預設值,而且可選引數必須放在函式引數列表的最後。
命名引數與可選引數的結合使用,比如現在有一個方法:
public void TestM(int a ,int b = 1 , int c = 2, bool d = false , string e = "test")
當我呼叫的時候,如果只想用到其中的 a,d 引數怎麼辦?,可以這樣呼叫
1. 將 d 前面的引數全部初始化,其中可選引數用預設值初始化:
TestM(2,1,2,true);
2. 使用命名引數:
TestM(2,d: true);
注意上面的情況,當有多個可選引數時,命名引數的作用凸顯,可以傳遞任何可選引數而不關心到底有幾個可選引數和他們的順序。
相關文章
- c# 方法引數(傳值,傳引用,ref,out,params,可選引數,命名引數)C#
- TypeScript 函式可選引數和預設引數TypeScript函式
- python疑問5:位置引數,預設引數,可變引數,關鍵字引數,命名關鍵字引數區別Python
- C#中的值引數,引用引數及輸出引數C#
- c# 方法引數_值引數C#
- c# 方法引數_引用引數C#
- C# 中的 in 引數和效能分析C#
- c#方法引數_輸出引數C#
- c# 方法引數_陣列引數C#陣列
- kettle 引數——變數引數和常量引數變數
- 淺談C#可變引數paramsC#
- C#引數傳遞之值引數C#
- 12.MyBatis學習--對映檔案_引數處理_單個引數&多個引數&命名引數MyBatis
- iOS可變引數(不定引數)的用法iOS
- C#通過反射獲取類中的方法和引數個數,反射呼叫方法帶引數C#反射
- c#基礎-5.變長引數和引數預設值C#
- Swift語言中為外部引數設定預設值可變引數常量引數變數引數輸入輸出引數Swift變數
- 【Java】可變引數Java
- Swift: 可變引數Swift
- Java可變引數Java
- Java 可變引數Java
- 關鍵字引數與非關鍵字引數(可變引數)詳解
- JavaScript形式引數和實際引數JavaScript
- 引數和變數變數
- C#陣列引數C#陣列
- c# {0}引數值C#
- mysqldump引數選項MySql
- Python可變引數*args和**kwargsPython
- Java方法04:命令列傳遞引數、可變引數Java命令列
- Oracle中INITRANS和MAXTRANS引數Oracle
- Java對比有引數和無引數Java
- nodejs接收get引數和post引數NodeJS
- Swift學習筆記(三十三)——常量引數,變數引數和inout引數Swift筆記變數
- go-可變引數Go
- 集合框架-可變引數框架
- Python可變引數Python
- 可變引數例項
- Laravel同時接收路由引數和查詢字串中的引數Laravel路由字串