第九章 參數

來源:互聯網
上載者:User

標籤:nal   名稱   否則   列表   返回   service   option   var   傳參數   

目錄

9.1 選擇性參數和具名引數

9.2 隱式類型的局部變數

9.3 以傳引用的方式向方法傳遞參數

9.4 向方法傳遞可變數量的參數

9.5 參數和傳回型別的設計規範

9.6 常量性

9.1 選擇性參數和具名引數

設計方法的參數時,可為部分或全部參數分配預設值。然後,調用這些方法的代碼可以選擇不提供部分實參,使用其預設值。此外,調用方法時可通過指定參數名稱來傳遞實參。

9.1.1 規則和原則

如果在方法中為部分參數指定了預設值,請注意一下附加的規則和原則

可為方法,構造器方法和有參屬性(C#索引器)的參數指定預設值。還可為屬於委託定義一部分的參數指定預設值。以後調用該委託類型的變數時可省略實參來接受預設值。

有預設值的參數必須放在沒有預設值的所有參數之後。“參數數組”這種參數必須放在所有參數(包括有預設值的參數)之後,而且數組本身不能有一個預設值。

預設值必須是編譯時間能確定的常量值。包括基元類型,枚舉類型以及能設為null的任何參考型別。實值型別的參數可將預設值設為實值型別的執行個體,並讓它的所有欄位都包含零值(可用default關鍵字和new關鍵字)。

不要重新命名參數變數,否則任何調用者以傳參數名的方式傳遞實參,它們的代碼也必須修改。

如果方法從模組外部調用,更改參數的預設值具有潛在的危險性。

如果參數用ref或out關鍵字進行了標識,就不能設定預設值。因為沒有辦法為這些參數傳遞有意義的預設值。

使用可選或具名引數調用方法時,還要注意以下附加的規則和原則

實參可按任意順序傳遞,但命名實參只能出現在實參列表的尾部。

可按名稱將實參傳給沒有預設值的實參,但所有必須的實參都必須傳遞。

C#不允許省略逗號之間的實參。

9.1.2 DefaultParameterValueAttribute和OptionalAttribute

在C#中,一旦為參數分配了預設值,編譯器就會在內部向該參數應用定製特性System.Runtime.InteropServices.OptionalAttribute。該特性會在最終產生的中繼資料中持久性地儲存下來。此外,編譯器向參數應用System.Runtime.InteropServices.DefaultParameterValueAttribute特性,並將該屬性持久性儲存到產生的檔案的中繼資料中。然後,會向DefaultParameterValueAttribute的構造器傳遞你在原始碼中指定常量值。之後,一旦編譯器發現某個方法調用缺失了部分實參,就可以確定省略的是可選的實參,並從中繼資料中提取預設值,將值自動嵌入調用中。

9.2 隱式類型的局部變數

C#能根據初始設定式的類型推斷方法中的局部變數的類型。

不能用var聲明方法的參數類型。因為編譯器必鬚根據在call site 傳遞的實參來推斷參數類型,但 call site 可能一個都沒有,也可能有好多個。

不能用var宣告類型中的欄位。因為欄位可以被多個方法訪問,而C#團隊認為這個協定(變數的類型)應該顯示陳述。另一個原因是一旦允許,匿名型別就會泄露到方法的外部。

9.3 以傳引用的方式向方法傳遞參數

 

9.4 向方法傳遞可變數量的參數

 

9.5 參數和傳回型別的設計規範

 

9.6 常量性

 

第九章 參數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.