欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

什么是C#中匿名對象與var以及動態(tài)類型dynamic

什么是C#中匿名對象與var以及動態(tài)類型 dynamic?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)是一家以網(wǎng)站建設(shè)公司、網(wǎng)頁設(shè)計、品牌設(shè)計、軟件運(yùn)維、成都網(wǎng)站營銷、小程序App開發(fā)等移動開發(fā)為一體互聯(lián)網(wǎng)公司。已累計為三維植被網(wǎng)等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。

  隨著C#的發(fā)展,該語言內(nèi)容不斷豐富,開發(fā)變得更加方便快捷,C# 的鋒利盡顯無疑。C# 語言從誕生起就是強(qiáng)類型語言,這一性質(zhì)到今天不曾改變,我想以后也不會變。既然是強(qiáng)類型語言,那編寫任一程序均要求滿足下面的基本條件:

1、變量聲明必須指明其類型

2、變量類型明確后,其類型在Runtime亦不能改變

代碼如下:

    public  class Student
    {        
    public string Name { get; set; }        
    public int Age { get; set; }        
    public string Like { get; set; }
    }
static void Main(string[] args)
{    int a = 10;    string s = "abc";
    Student student = new Student();    //下面出現(xiàn)編譯錯誤,變量類型在聲明后無法再變更
    s = a;
    student = s;
    a = 10.1f;
}

然而,在實(shí)際開發(fā)中我們經(jīng)常面臨如下幾種常見問題:

1、在一個較大的程序程序中,只有一處或很少幾處(不超過3處)需要用到 某個或某些類型(如上 Student),其他地方不再需要這些類型。單獨(dú)聲明一個Student類型,所需代碼量,可能超過使用該類型時的代碼量,投入產(chǎn)出比不劃算。

2、在一處程序中,只需要某種類型對象的部分屬性或方法參與運(yùn)算。在這種情況下將該類型對象臨時轉(zhuǎn)換為程序所需的部分屬性和方法的對象,可使程序更加精簡。

3、其他情況........我暫未留意到......歡迎補(bǔ)充........

上面這些 C# 實(shí)際開發(fā)中常見問題,在 JavaScript 開發(fā)中有著比較好的解決方案,如下:

//在此處js中需要模擬一個學(xué)生對象
student = {"name":"張三","age":20,"like":"LOL"};
//在此處js中需要模擬一個老師對象
teacher = {"name":"李老師","like":"沒收學(xué)生手機(jī),自己LOL"};
//此處需要將學(xué)生student轉(zhuǎn)換成只有name和age的對象
person = {"name":student.name,"age":student.age};

如果你不熟悉上面的js語法,你可以去百度搜索 “json語法”,告訴你很簡單哦(而且很重要)。

匿名對象(匿名類型)

因此C#在3.0版本中吸收了JavaScript腳本語言的這種語法優(yōu)點(diǎn),對C#做了相應(yīng)升級使其也支持這種語法形式(C#依然是強(qiáng)類型語言)。示例代碼如下:

static void Main(string[] args)
{     new {Name="張三",Age=20,Like="LOL"};
}

上面的C#代碼 通過new關(guān)鍵字告訴編譯器要創(chuàng)建一個對象,該對象具有Name,Age,Like三個屬性,=后為屬性對應(yīng)的值。如此我們避開了“創(chuàng)建一個對象首先要有該對象類型的約束”,因此在開發(fā)過程中對于使用較少的類型我們無需再創(chuàng)建單獨(dú)的類了,上面提到的問題1被解決

現(xiàn)在創(chuàng)建出來的對象沒指定具體類型,因此稱為匿名對象。

Var登場

現(xiàn)在要使用匿名對象,則需要使用變量引用它。雖然我們在創(chuàng)建時沒有指定對象的類型,但編譯器會在編譯過程中幫我們創(chuàng)建一個具有相關(guān)屬性和方法的類型。此時編譯出的類型名稱是隨機(jī)生成的,因此變量類型無法確定。示例如下:

static void Main(string[] args)
{    //XXX為類型聲明    //x為引用變量 
     XXX x = new {Name="張三",Age=20,Like="LOL"};
}

雖然我們不知道編譯器生成的類型名稱,但我們可 讓編譯器自己根據(jù)編譯的結(jié)果來推斷變量類型。此時var關(guān)鍵字便發(fā)揮作用了:

static void Main(string[] args)
{     var x = new {Name="張三",Age=20,Like="LOL"};
}

var 關(guān)鍵字說明 x 的類型由賦于的值來決定(推定),并能根據(jù)編譯器推定給出智能提示,如下圖:

什么是C#中匿名對象與var以及動態(tài)類型 dynamic

var使用注意事項:

1、var 僅能聲明方法內(nèi)的局部變量

2、var 聲明的變量在被賦值后類型即確定下了,后續(xù)程序中不能在賦其他類型的值

3、var x = new object() 沒有意義,不要寫這樣的代碼...............

什么是C#中匿名對象與var以及動態(tài)類型 dynamic

現(xiàn)在有匿名對象和var推斷類型的支持,我們就能處理上面提到的問題2。示例代碼如下:

        static void Main(string[] args)
        {            
        var x = new { Name = "張三", Age = 20, Like = "LOL" };            
        var s = new { Name = x.Name, Age = x.Age };  
        }

上面僅為示例,如果你熟悉Linq或Entity Framework,那問題2對應(yīng)的用法將是鋪天蓋地的.......

動態(tài)類型 dynamic 出場

對于匿名類型的使用一般局限于方法的局部,可理解為:隨用隨定義,用完就消失。有如下情況應(yīng)該怎么辦?

        static void Main(string[] args)
        {            
        var x = GetObject(); 
        }        
        private static XXX GetObject()
        {            
        return new { Name = "張三", Age = 20, Like = "LOL" };
        }

通過GetObject方法返回一個匿名對象,所以方法返回值 類型名稱無法確定,此處暫時用XXX代替。在這種情況下返回的類型不確定,可以使用 dynamic 來指明。如下:

          Main( x =    { Name = , Age = , Like =

此時方法不會出現(xiàn)語法錯誤,程序可以成功編譯并執(zhí)行。那么 dynamic 到底做了什么,可以使上面的程序成功編譯呢?

dynamic的作用:

1、dynamic 表示動態(tài)類型,動態(tài)類型的含義就是 程序編寫、編譯階段 類型不確定,在Runtime時再通過反射機(jī)制確定相關(guān)對象的屬性或方法。因此編寫階段不會進(jìn)行語法檢測。

2、dynamic 可用來聲明 字段、屬性、方法參數(shù)、方法返回值

3、dynamic 不支持智能提示,因為你寫代碼時 dynamic  是什么沒法知曉(反射)

dynamic 聲明的變量,可理解為 object 類型變量。所以給dynamic變量賦任何類型值都正確,但在使用變量來取得某個屬性值或調(diào)用某方法時(此時程序肯定處于Runtime狀態(tài)),CLR會檢查(反射)所調(diào)用的屬性或方法是否存在,不存在報運(yùn)行時異常。

dynamic在 Asp.net Mvc web開發(fā)中處處使用,雖然看上去很復(fù)雜,本質(zhì)就上面所說內(nèi)容。

說明:

var 和 dynamic 看似功能類似,但它們是不同的:

vardynamic
聲明字段×
局部變量
方法參數(shù)類型×
方法返回值類型×

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。

網(wǎng)站名稱:什么是C#中匿名對象與var以及動態(tài)類型dynamic
網(wǎng)頁路徑:http://aaarwkj.com/article16/pcsogg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、面包屑導(dǎo)航、微信小程序、手機(jī)網(wǎng)站建設(shè)App設(shè)計、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營
日日做日夜夜操天天搞| 久久成人午夜免费电影| 日韩av亚洲在线观看| 国产一区二区精品日韩| 黄色av免费无毒网站| 日本韩国欧美一区在线| 亚洲综合日韩精品在线| 国产欧美日韩综合激情| 99热这里有精品久久| 人妻有码一区二区三区| 1区2区3区精品视频| 亚洲欧美另类不卡专区| 欧美在线免费黄片视频| 日韩有码高清av在线| 免费观看欧美日韩论理电影| 最新天堂av资源在线观看| 亚洲最大成人av在线| 国产精品无遮挡猛进猛出 | 综合久久99中文综合久久| 日韩在线中文字幕三区| 欧美精品成人免费在线| 亚洲欧美日韩国产在线一区| 精品国产一区二区三区性色av| 亚洲日本欧美一区二区| 亚洲免费成人一区二区| 国产精品国产三级国产av一区| 精品中文人妻中文字幕| 懂色粉嫩蜜臀久久一区二区| 亚洲成人av日韩在线| 亚洲日本一区二区一本一道| 国产精品一区二区三区熟女| 婷婷色精品一区二区激情| 在线国产偷拍自拍视频| 日韩50岁老女人骚色| 激情国产白嫩美女在线观看| 精品av一区二区在线| 欧美一区二区成人精品视频| 国内精品老年人视频网站| 99热这里只有精品中文有码| 伊人青草免费在线视频| 说中文字幕的黄色大网站|