日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

《C#3.0 in a Nutshell,3rd Edition》之C#3.0和.net3.5基本介绍篇

發(fā)布時間:2023/12/10 C# 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《C#3.0 in a Nutshell,3rd Edition》之C#3.0和.net3.5基本介绍篇 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
前言 借著看這本書的機會,好好系統(tǒng)學習一下C#3.0和.net3.5。 C#3.0是一門面向?qū)ο蟮木幊陶Z言,具有多用途和類型安全等特征。為實現(xiàn)開發(fā)和學習的高效性,她在語言的簡單,易表達,以及可編程性上做了很大努力。使得新人能夠很快入門,開發(fā)者能夠快速開發(fā)出程序。但這些并不是損害語言的功能為前提的。 正文 1.C#的面向?qū)ο笮?Object Orientation) C#同JAVA一樣是面向?qū)ο蟮恼Z言,具有封裝(encapsulation),多態(tài)(polymorphism),繼承(polymorphism)的特性。但是她也有著區(qū)別其它面向?qū)ο笳Z言的特點。 a.統(tǒng)一的類型系統(tǒng)(Unified type system) ?就是說所有的類型(Type)都是共享一個通用基礎(chǔ)類型(Common base Type). 無論值類型或引用類型就是繼承自System.object. 而object所擁有的方法所有類型都可以使用,如:ToString(),Equals()等。 b.類(Class)和接口(Interface) ?在傳統(tǒng)的面向?qū)ο笳Z言中只有類這一種表現(xiàn)形式,而在C#(Java)中卻有了接口(Interface),接口是一種只有定義沒有實現(xiàn)的類,由于C#是一種單類繼承語言,所以接口就顯得格外有用,一個類可以繼承多個接口, 彌補了單類繼承帶來的不足。(單類繼承應(yīng)該是語言設(shè)計者有意這么做的,大概是為了保證類的純凈)。 c.屬性(Properties),方法(Methods)和事件(Events) 傳統(tǒng)的面象對象語言只有Methods,而C#增加了屬性和方法,這些特性豐富了我們編程,特別是做一些組件和控件開發(fā)的時候就顯得特別有用。 2.C#的類型安全(Type Safety) ?C#是一門強類型語言,也就是說你定義了Int參數(shù)的方法,不用用float參數(shù)去調(diào)用。編譯器(Complier)會去強制做類型檢查,不匹配的類型是會拋出異常(Exception)并提示錯誤,變量的定義也是如此。隨著VS的IDE功能不斷強大,已經(jīng)提供了智能感知(IntelliSense)的功能,讓我們提前排除這些錯誤。 另外在c#3.0中出現(xiàn)了Var,但這也是一種強類型,編譯器會根據(jù)上下文,進行類型推斷出她的類型。 3..net的內(nèi)存管理(Memory Management) ?? C#運行在一個運行時(Common Lanague Runtime)上,這個CLR具有強大的功能,她幫我們管理著程序所用的內(nèi)存。她有著內(nèi)存管理,垃圾回收,線程管理等功能。這樣就方便了我們編程,不需要想C++那樣需要自己寫大量的代碼來釋放資源,所以理論上時不會出現(xiàn)內(nèi)存泄漏的情況的。 但是我個人覺最好不要偷懶,象一些昂貴的資源還是手動的釋放比價好,比如:對打印機的調(diào)用,還有多線程管理.防范式編程還是需要的。 CLR的垃圾回收一般是有兩個線程來運作的,對于普通的對象的回收器就是直接覆蓋內(nèi)存,而對比較昂貴的資源暫時無法回收的,就會放到另外一個線程上,等到安全點的來臨時進行回收。這方面可以到網(wǎng)上找找介紹資料。 4.C#的多平臺支撐(Platfrom Support) C#和CLR都是符合ECMA的標準。 C#的代碼通常是運行在windows平臺上,但是卻不妨礙她運行在其它的系統(tǒng)上如:Linux, Solaris, Mac OS X。.net framework為我們提供了統(tǒng)一的編程模型,所以我們只要針對.net編程,而不需要考慮系統(tǒng)的差異性。 C#的代碼也可以運行在Silverlight這個宿主(host)上,她是微軟新推出的一項技術(shù)。 4.C#和通用語言運行時(CLR)的關(guān)系 ?C#是.運行在CLR上的眾多語言之一,她依賴著.net提供的內(nèi)存管理等服務(wù)。 5.通用語言進行時(CLR)和.net Framework的關(guān)系 .net framework 是由CLR和一大堆,一系列的類組成。這個巨大的類庫又分成了核心類(Core libraries)和應(yīng)用類(applied libraries),應(yīng)用類是依靠核心類的。 如圖:(圖片來自書) 用.net上任何語言寫的代碼都會被編譯成中間語言(Intermediate Language),即IL。這些中間語言以及他們的配置信息(type information)和原數(shù)據(jù)(MetaData)都會一起打包成可執(zhí)行文件(exe)或程序集文件(dll),放在CLR上執(zhí)行。 當CLR要執(zhí)行代碼時,首先是加載程序集(Assembly),通過CLR的即時編譯器(Just-In-Time)把IL轉(zhuǎn)換成適合CPU特點運行的機器碼. 6.C#3.0給我們帶來了那些新特性? C#3.0新特性的重中之重就是Linq(Language Integrated Query capabilities)了,她的前身是Comega,主要設(shè)計者是Erik Meijer,她和Omega有相似之處。 Linq的語法特征跟SQL語法達到95%的相似,但用法以及語意卻有出入,編譯器能夠?qū)λ龀龊芎玫恼Z法檢查。 Linq可以對本地的集合(Collections),和遠端的數(shù)據(jù)庫(DB)和XML,進行查詢分析。 C#3.0還有如下新特性。 a.?????? Lambda 表達式 (Lambda Expressions)例如:Func<int,int> square = x => x * x;Console.WriteLine (square(3));???????? // 9 b.?????? 擴展方法(Extensions Method)例如:string[] names = { "Tom", "Dick", "Harry" };IEnumerable<string> filteredNames = names.Where (n => n.Length >= 4); 例子有點問題,體現(xiàn)不了擴展方法的特性。 比如:Int類型,我們想在它里面加自己的方法myMethod(),以后調(diào)用Int類型的時候,智能提示就是出現(xiàn)myMethod(),就可以用到這個。 c.??????? 隱式類型變量(Implicitly typed local variables) 例如:var filteredNames = names.Where (n => n.Length == 4); 也就是Var。 d.推算分析(Query comprehension) 這個是我的叫法,她是Linq的語法,如:from,select ,in,group by 之類的。 例如:var filteredNames = from n in names where n.Length >= 4 select n;?e.匿名類(Anonymous types) 就是我們無需象傳統(tǒng)的那樣定義一個類,象定義一個臨時變量定義一個有結(jié)構(gòu)的類。 她只是為方便我們臨時使用。以后會細說。 例如:var query = from n in names where n.Length >= 4?????????? ?select new {???????????????????????? Name = n,???????????????????????? Length = n.Length?? ????????????????????};var dude = new { Name = "Bob", Age = 20 };?f.對象初始化器(Object initializers)這個是方便我定義對象時,省去一大堆的構(gòu)造器。同時也方便了我們實例化。例如:Bunny b1 = new Bunny { Name="Bo", LikesCarrots=true, LikesHumans=false };?g.隱式類型數(shù)組(Implicitly typed arrays)這個跟隱式類型變量定義差不多,只是她是數(shù)組。例如:var dudes = new[]{?? new { Name = "Bob", Age = 20 },?? new { Name = "Rob", Age = 30 }};?h.自動屬性(Automatic properties) 又一個語法糖(syntactic sugar),為了我們這些代碼工人省力而做的。 例如:public class Stock{?// C# 3.0:????????????? public decimal X { get; set; }??// C# 2.0:????????????? private decimal y;????????????? public decimal Y????????????? {?????????????? ?get { return y;?}??????????????? set { y = value; }????????????? }} I.部分方法(Partial methods) 這用處就是我們一個方法里可能需要調(diào)用另外一個未定義或定義好的方法,她可能暫時用不上。部分方法就是為她設(shè)計的。 例如: partial class PaymentForm { partial void ValidatePayment (decimal amount);//部分方法的申明 } ?///部分方法的定義 partial class PaymentForm { partial void ValidatePayment (decimal amount) { if (amount > 100) } } ///調(diào)用 Static void Main() { PaymentForm form=new PaymentFrom(); Form.ValidatePayMent(5.3);///如果沒有定義上面的方法,也不會報錯。 } j.表達樹(Expression trees) 這個不多說了,以后會說到。 例如: string[] names = { "Tom", "Dick", "Harry" }; IEnumerable<string> filteredNames =??????????????? // Include only names ?Enumerable.Where (names, n => n.Length >= 4);??? // of >= 4 characters. 以上都c#3.0新出的特性,行內(nèi)都說是語法糖。呵呵!以后的文章會詳細說這些東西的。 后記 本人學習中,錯誤難免,敬請指教,謝謝!

轉(zhuǎn)載于:https://blog.51cto.com/19449/154457

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的《C#3.0 in a Nutshell,3rd Edition》之C#3.0和.net3.5基本介绍篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。