C#方法的參數有六種,分別是值參數、參考參數、輸出參數、參數陣列、命名參數、可選參數。以下這篇文章就來跟大家介紹一下,有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
值參數
#值參數是方法的預設類型,透過複製實參的值到形參的方式把資料傳遞到方法,方法被呼叫時,系統作兩步驟操作;
1、在堆疊中為形參分配空間。
2、複製實參到形參。
1)在方法被呼叫前,用作實參的變數a1的引用已經在堆疊裡了。
2)隨著方法的開始,系統在堆疊中為形參分配空間,並從實參複製值。
3)因為a1是引用型,所以引用被複製,結果實參和形參都引用堆中的同一個物件。
4)因為a2是值類型,所以值被複製,產生了一個獨立的資料。
5)在方法執行後,形參被從堆疊中彈出。
6)a2、值型,它的值不受方法行為的影響。
7)a1、引用型,它的值被方法的行為改變了。
引用參數
1、使用參考參數時,必須在方法的宣告與呼叫中使用ref修飾符。
2、實參必須是變量,在用作實參前必須賦值。
對於值參數,系統在堆疊上為形參分配記憶體;相反,對於引用參數,形參的參數名看起來就好像是實參變數的別名,也就是說,它們指向的是相同的記憶體位置。所以在方法的執行過程中對形參作的任何改變,在方法執行完成後依然有效(表現在實參變數上)。
引用參數的傳遞,對值型別與引用型別都是完全傳遞,不存在複製值與複製引用,也就是引用相同的記憶體位置。
輸出參數
輸出參數用於從方法體內把資料傳遞到呼叫程式碼,它非常類似引用參數。
1、必須在方法的宣告與呼叫中使用out修飾符。
2、和引用參數相似,實參必須是變數。
就像引用參數,輸出參數的形參擔當實參的別名,方法內對形參的任何改變在方法執行完成後,透過實參變數都可見。
與引用參數的不同,輸出參數有以下2個要求。
1、在方法內部,輸出參數在被讀取之前必須被賦值,這意味著參數的初始值是無關的,因此沒有必要在方法呼叫之前為實參賦值。
2、在方法返回前,方法內部的任何貫穿的可能路徑都必須為所有輸出參數進行一次賦值。
參數數組
上面3參數方式,必須嚴格的一個實參對應一個形參,參數數組不一樣,它允許零個或多個實參對應一個特殊的形參。
參數陣列的要求如下:
1、在一個參數清單中只能有一個參數陣列。
2、如果有,它必須是清單中的最後一個。
宣告參數數組,必須要有params修飾符(呼叫不需要修飾符),必須是一種類型的數組。
使用分散式傳參時,編譯器做如下事:
1)接受實參列表,用它們在堆中創建並初始化一個數組。
2)把陣列的參考存到堆疊中的形參裡。
3)如果在對應的形參數組的位置沒有實參,編譯器會建立一個有零個元素的陣列來使用。
4)如果陣列參數是值類型,那麼值被複製,實參不受方法內部的影響。
5)如果陣列參數是引用類型,那麼引用被複製,實參引用的物件可以受到方法內部的影響。
在使用陣列式傳參時,編譯器使用你的資料而不是重新建立一個。即相當引用參數。
命名參數
上面用到的四個參數,都是位置參數,也就是說每個實參的位置必須一一對應對應的形參位置。
從.Net4.0開始,只要顯示指定參數的名字,就可以以任意順序在方法呼叫中列出實參,細節如下。
1.方法的宣告沒有什麼不一樣。形參已經有名字了。
2.不過在呼叫方法的時候,形參的名字後面跟著冒號和實際的參數值或表達式。
在呼叫的時候,也可以位置參數和命名參數混合使用,但是所有的位置參數必須先列出,
### #
## # # # #
##
##
##
##
##
##
可選參數
可選參數是.Net4.0才加入的,在呼叫方法的時候可以包含這個參數,也可以省略它。
為了表示某個參數是可選的,你需要在方法宣告的時候為參數提供預設值。制定預設值的語法和初始化本地變數的語法一樣。
如下圖
1)形參b設定成了預設值。
2)因此,在呼叫方法的時候只有一個參數,方法會使用3作為第二個參數的初始化。
對於可選參數的聲明,有幾個重要事項:
1、不是所有的參數類型都可以作為可選參數。 1)、只要值類型的預設值在編譯的時候可以確定,就可以使用值類型作為可選參數。
### 2)、只有在預設值是null的時候,引用型別才可以當作可選參數來使用。 ###### 3)、可選參數只能是值參數。 ######2、所有必填參數必須在可選參數聲明之前聲明,如果有params參數,必須在所有可選參數之後聲明。 ######3、必須從可選參數清單的最後開始省略,一直到開頭,否則會造成參數歧義。 ######4.若想消除參數歧義,可以結合命名參數和可選參數的特性。 ######如下圖###### #########本文來自 ####C#.Net教學### 欄目,歡迎學習! ###以上是淺談C#方法的六種參數的詳細內容。更多資訊請關注PHP中文網其他相關文章!