在所有必須參數後面定義可選參數,如果在調用時提供了某個可選參數的值,那麼必須提供該可選參 數之前所有可選參數的值(如果此參數之前有可選參數),而不允許使用逗號分隔的形式提供參數,即以 下調用是錯誤的:
CreateUser("admin","adminpassWord",,true);
而必須寫成:
CreateUser("admin","adminpassWord",20,true);
或者更好的解決辦法是使用命名參數:
CreateUser("admin","adminpassWord",isLocked:true);
1.3. COM API訪問
命名和可選參數與dynamic和其他增強一起使得訪問COM API更加方便。例如在C#3.0或更早的版本中在 調用某些COM API時,如果要省略某些參數需要使用Type.Missing,例如以下代碼(代碼系摘抄):
var ExcelApp = new Microsoft.Office.Interop.Excel.Application();
var myFormat =
Microsoft.Office.Interop.Excel.XlRangeAutoFormat.xlRangeAutoFormatAccounting1;
ExcelA pp.get_Range("A1", "B4").AutoFormat(myFormat, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
但是有了命名和可選參數後,可以很簡單的寫成這樣:
ExcelApp.get_Range("A1", "B4").AutoFormat( Format: myFormat );
2. 類型等價支持(Type Equivalence Support)
(此段為翻譯)
如果嵌入來自於強命名托管程序集的類型信息時,可以使在某一應用程序中的類型與獨立的發布版本 中類型保持松散的連接。這意味著應用程序可以在不需要重新編譯每一個版本的情況下使用多個版本托管 類庫中的類型。
類型嵌入經常用於COM交互,例如使用Microsoft Office中的自動化的應用程序。嵌入類型信息允許同 一個應用程序在安裝了不同的Office版本的機器上運行。而且開發人員可以在完全托管解決方案中使用類 型嵌入。
來自於某個程序中可以嵌入的類型需要滿足以下條件:
該程序集至少暴露一個公共接口。
該嵌入接口使用ComImport和Guid特性聲明
該程序集使用ImportedFromTypeLib和一個程序集級別的Guid特性標注(默認情況下Visual Basic和 Visual C#模版已包含了程序集的Guid特性)。
在指定可以嵌入的公共接口後,可以創建實現了這些接口的類。客戶端程序可以在設計時引用包含了 這些公共接口的程序何並且默認Embed Interop Types屬性為true以嵌入類型信息(在命令行使用/link編 譯開關可以達到相同的效果),接下來客戶端可以創建這些接口的實例。如果您創建了強命名運行時程序 集的新版本,客戶端不需要使用新的程序集重新編譯,相反,客戶端程序通過公共接口的嵌入類型信息繼 續使用可用的程序集的版本