日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
C# 2010命名和可選參數的新特性

1.命名參數允許調用者通過提供參數的名稱來為其賦值,這樣參數的位置就不在重要了??蛇x參數允許在定義時為某些參數賦值,在調用時可以忽略這些“可選的”參數。命名參數和可選參數可以應用在方法、索引器、構造函數和委托。命名參數和可選參數與dynamic類型結合在一起使用,可以方便的訪諸如Office自動化API之類的COM API。

創(chuàng)新互聯主要業(yè)務有網站營銷策劃、網站建設、成都網站制作、微信公眾號開發(fā)、小程序設計H5技術、程序開發(fā)等業(yè)務。一次合作終身朋友,是我們奉行的宗旨;我們不僅僅把客戶當客戶,還把客戶視為我們的合作伙伴,在開展業(yè)務的過程中,公司還積累了豐富的行業(yè)經驗、營銷型網站建設資源和合作伙伴關系資源,并逐漸建立起規(guī)范的客戶服務和保障體系。 

1.1 命名參數
命名參數的語法為:

參數名稱1:參數值1,參數名稱2:參數值2…

例如以下代碼:

static void Main(string[] args)
{
    CreateUser(password:"adminpassword",name:"admin");
}

static void CreateUser(string name, string password)
{
    Console.WriteLine("name:{0},password:{1}", name, password);
}

可以看到由于在調用時使用了命名參數,參數的位置就不在重要了。

1.2. 可選參數
方法、構造函數、索引器和委托的定義可以指定其參數為必選的還是可選的,在調用時必須提供必選參數,但是可以省略可選參數。

還可以使用System.Runtime.InteropServices.OptionalAttribute特性類定義可選參數,該類從1.0時代就已經包含在基類庫中了。

每一個可選參數的定義都包含默認值(默認值必須是常量),如果在調用時沒有指定該參數,則使用默認值。例如以下代碼:

static void Main(string[] args)

{

    CreateUser("admin","adminpassword",50);

}

///

/// 創(chuàng)建用戶

///

/// 用戶名稱

/// 用戶密碼

/// 積分

/// 是否鎖定

static void CreateUser(string name, string password,

    int score=20,bool isLocked=false)

{

    Console.WriteLine("name:{0},password:{1}", name, password);

}

在所有必須參數后面定義可選參數,如果在調用時提供了某個可選參數的值,那么必須提供該可選參數之前所有可選參數的值(如果此參數之前有可選參數),而不允許使用逗號分隔的形式提供參數,即以下調用是錯誤的:

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;

excelApp.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)(此段為翻譯)

如果嵌入來自于強命名托管程序集的類型信息時,可以使在某一應用程序中的類型與獨立的發(fā)布版本中類型保持松散的連接。這意味著應用程序可以在不需要重新編譯每一個版本的情況下使用多個版本托管類庫中的類型。

類型嵌入經常用于COM交互,例如使用Microsoft Office中的自動化的應用程序。嵌入類型信息允許同一個應用程序在安裝了不同的Office版本的機器上運行。而且開發(fā)人員可以在完全托管解決方案中使用類型嵌入。

來自于某個程序中可以嵌入的類型需要滿足以下條件:

該程序集至少暴露一個公共接口。
該嵌入接口使用ComImport和Guid特性聲明
該程序集使用ImportedFromTypeLib和一個程序集級別的Guid特性標注(默認情況下Visual Basic和Visual C#模版已包含了程序集的Guid特性)。
在指定可以嵌入的公共接口后,可以創(chuàng)建實現了這些接口的類??蛻舳顺绦蚩梢栽谠O計時引用包含了這些公共接口的程序何并且默認Embed Interop Types屬性為true以嵌入類型信息(在命令行使用/link編譯開關可以達到相同的效果),接下來客戶端可以創(chuàng)建這些接口的實例。如果您創(chuàng)建了強命名運行時程序集的新版本,客戶端不需要使用新的程序集重新編譯,相反,客戶端程序通過公共接口的嵌入類型信息繼續(xù)使用可用的程序集的版本

2.1. 首先創(chuàng)建一個強命名接口類庫(根據滿足條件設置屬性)

[ComImport]
[Guid("8DA56996-A151-4136-B474-32784559F6DF")]
public interface ISampleInterface
{
    void GetUserInput();
    string UserInput { get; }
}

2.2. 創(chuàng)建強命名類庫,引用接口類庫并定義實現以上接口的類:

public classSampleClass: ISampleInterface

{

    private stringp_UserInput;

    public stringUserInput { get{ return p_UserInput; } }

    public voidGetUserInput()
    {
        Console.WriteLine("Please enter a value:");
        p_UserInput = Console.ReadLine();
    }
}

2.3. 創(chuàng)建客戶端應用程序,引用接口并使用反射的方法動態(tài)創(chuàng)建類型執(zhí)行相應操作:

class Program

{

    static void Main(string[] args)

    {

        Assembly sampleAssembly = Assembly.Load("TypeEquivalenceRuntime");

        ISampleInterface sampleClass =

            (ISampleInterface)sampleAssembly.CreateInstance("TypeEquivalenceRuntime.SampleClass");

        sampleClass.GetUserInput();

        Console.WriteLine(sampleClass.UserInput);

        Console.WriteLine(sampleAssembly.GetName().Version.ToString());

        Console.ReadLine();

    }

}

4. 修改實現了接口在的客戶端類,增加新的方法并修改程序集版本號和文件版本號為2.0.0.0:

public DateTime GetDate()
{
    return DateTime.Now;
}

5. 再次執(zhí)行客戶端程序,觀察不同(客戶端將輸出新的版本號)。

在.NET全部使用托管代碼創(chuàng)建的程序集自動會識別更新,也就是說不需要使用額外的屬性定義,直接創(chuàng)建接口、實現接口類庫和客戶端類(或者沒有接口直接創(chuàng)建類庫在客戶端引用),在類庫更新后復制到客戶端引用的位置,客戶端會自動檢測到該更新,這也是.NET程序集為開發(fā)人員帶來的好處。但是使用類型等價支持的作用體現在什么地方,我認為還是方便了COM API的訪問,因為COM可能是使用其他語言編寫的,沒有辦法做到像.NET程序集那樣自動感應版本變化,個人意見,期望高手解答。

3. 總結

Visual C#中提供了動態(tài)類型、命名參數、可選參數和類型等價支持,為編程帶來便利,對于訪問COM API來說更方便了。而且微軟多次提到了諸如Office之類的文字,是不是意味著微軟在不斷的鼓勵程序員不斷開發(fā)出其于Office的一些應用,亦或是現在其于Office的應用在不斷增加,還是應用程序中與Office的交互在不斷增加,通過增強的特性使這些工作更方便,來鞏固微軟件地位?一家之言,請高手不吝賜教。

【編輯推薦】

  1. Visual C# 2010新特性之dynamic類型
  2. 探討C#中的實體驗證(Entity Validation)
  3. C#中實現多繼承的方式:混合+接口

標題名稱:C# 2010命名和可選參數的新特性
本文地址:http://www.5511xx.com/article/ccdgheg.html