mvc公開課新語法_第1頁
mvc公開課新語法_第2頁
mvc公開課新語法_第3頁
mvc公開課新語法_第4頁
mvc公開課新語法_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、01.新語法本章中主要講解.Net 框架性語法。開發(fā)者可以使用新語法提高編程的效率以及代碼的運行效率;其本質(zhì)都是“語法糖”,由編譯器在編譯時轉(zhuǎn)成原始語法。自動屬性 Auto-Implemented Properties隱式類型 var對象初始化器類 &擴展方法系統(tǒng)內(nèi)置委托Lambda 表達(dá)式與 集合初始化器 方法Func / ActionPredicate (bool (T) / Comparison (T,T)標(biāo)準(zhǔn)查詢運算符 Standard query operator LINQ 查詢表達(dá)式Mvc 框架簡介:瀏覽器請求 服務(wù)器的 某個 控制器類 的 Action方法,方法中可以調(diào)用業(yè)務(wù)層等

2、代碼處理業(yè)務(wù),并產(chǎn)生數(shù)據(jù)M,交給視圖引擎,視圖引擎會找到對應(yīng)視圖,并將數(shù)據(jù) “填充到“視圖上對應(yīng)的位置,最終產(chǎn)生整個頁面的Html代碼,返回給瀏覽器。關(guān)于編譯器:編譯器會在編譯的時候,按照C#語法檢查代碼,C#語父類,則只能調(diào)用對象里的父類成員定變量只能調(diào)用其類型的成員,如果是自動屬性回顧傳統(tǒng)屬性概念屬性的目的:封裝字段,控制 1.讀寫權(quán)限但平時,主要是用來封裝 讀寫權(quán)限。及2.字段的規(guī)則(如:范圍)。回顧 語法:缺點,臃腫,代碼難看!麻煩!自動屬性 語法:只需要定義 無實現(xiàn)的屬性語法 即可,不需要定義字段。public Id get; set; public Age get; set; pu

3、blic string Name get; set; id; /字段public Id /屬性get return id; set id = value; 查看源碼:編譯后,也生成了對應(yīng)的屬性語法(get 和 set 方法)但同時,幫生成了一個私有變量總結(jié):自動屬性主要用在對 字段的 讀寫權(quán)限的封裝,幫助減少程序員代碼,讓代碼更好看;但實質(zhì)上在編譯時,還是會自動生成一個對應(yīng)的字段的。所以,從這個意義上說,自動屬性就相當(dāng)于是微軟提供的一個“語法糖”了。思考:用自動屬性程序員寫的代碼少了,機器做的事情就多了,那到底要不要使用它?如果 是針對 讀寫權(quán)限的封裝,就使用,因為它是在編譯的時候產(chǎn)生了負(fù)擔(dān),

4、并不是在運行的時候。(不會影響客戶運行程序時的效率?。┑蔷幾g生成的代碼也有一個顯而易見的缺點,語法太完整,編譯后的程序比較大。隱式類型 var回顧,傳統(tǒng)變量定義方式:隱式類型:在初始化時,就已經(jīng)根據(jù) = 右邊的 值 確定了 var 變量的類型了。編譯時,已經(jīng) 把 var 轉(zhuǎn)成了 相應(yīng)的類型了。var age1 =12;/age1=123;var name = ; var dog = new Dog();age1 = 123;name = ; dog.Id = 11;age = 11;/傳統(tǒng)方式注意:的同時必須初始化,因為編譯時要根據(jù)初始化值類型來推斷 var;后不能修改數(shù)據(jù)類型,因為初始化時

5、已經(jīng)確定了 var 類型了;只能作為方法局部變量使用。類的成員字段、方法的形參和返回值都不能使用!因為無法編譯時確定他們的類型!4.初始化表達(dá)式不能是函數(shù)和 null。查看源碼:var 已經(jīng)不存在了,都被替換成了 初始化值 的 類型。對象/集合初始化器回顧:List InitList()List list = new List();for ( i = 0; i 10; i+)Dog d = new Dog();d.Id = i;d.Name = Ruiky + i;d.Age = i * 2;d.Toy = new DogToy();d.Toy.ToyId = i;d.Toy.ToyName

6、= 狗狗玩具 + i;list.Add(d);return list;對象集合初始化器語法:用初始化器,創(chuàng)建數(shù)組!Dog dogs = ;new Dog() Id=1, Name=Ruiky, Age=1, Toy = new DogToy ToyId=1, ToyName=小球,new Dog() Id=1, Name=Ruiky, Age=1, Toy = new DogToy ToyId=1, ToyName=小球,new Dog() Id=1, Name=Ruiky, Age=1, Toy = new DogToy ToyId=1, ToyName=小球,new Dog() Id=1,

7、 Name=Ruiky, Age=1, Toy = new DogToy ToyId=1, ToyName=小球,new Dog() Id=1, Name=Ruiky, Age=1, Toy = new DogToy ToyId=1, ToyName=小球用法1List InitList()List list = new List();for ( i = 0; i 10; i+)Dog d = new DogId = i,Name = Ruiky + i,Age = i * 2,Toy = new DogToy()/使用屬性初始化器ToyId = i,ToyName = 狗狗玩具 + i;li

8、st.Add(d);return list;/用法 2List InitList()List list = new List;return list;new Dog() Id=1, Name=Ruiky, Age=1, Toy = ToyId=1, ToyName=小球,new Dog() Id=1, Name=Ruiky, Age=1, Toy = ToyId=1, ToyName=小球,new Dog() Id=1, Name=Ruiky, Age=1, Toy = ToyId=1, ToyName=小球,new Dog() Id=1, Name=Ruiky, Age=1, Toy = T

9、oyId=1, ToyName=小球,new Dog() Id=1, Name=Ruiky, Age=1, Toy = ToyId=1, ToyName=小球查看源碼:可以看到,編譯器幫組或集合。實例化的集合或者數(shù)組,并創(chuàng)建了元素對象,設(shè)置給數(shù)類回顧:類語法:避免過度的數(shù)據(jù)累積為一種情況特別進(jìn)行的數(shù)據(jù)封裝 c.避免進(jìn)行單調(diào)重復(fù)的編碼查看源碼:1.編譯器自動為 這個 【類】 創(chuàng)建了一個無命名空間的類型。2.在 new 關(guān)鍵字處,創(chuàng)建該類對象3.編譯器創(chuàng)建的類結(jié)構(gòu)注意:當(dāng)出現(xiàn)“相同”的類的時候,編譯器只會創(chuàng)建一個類1.var obj = newId = 1,Name = Ruiky,Age = 2

10、;2. 編譯器如何區(qū)分根據(jù):類是否相同?屬性名,屬性值(因為這些屬性是根據(jù)值來確定類型的),屬性個數(shù),屬性的順序。方法回顧:普通方法定義方式,因為方法的存在是為了 復(fù)用 一段代碼,所以一般會給方法取個名字,這個方法的就可以通過 方法名調(diào)用。方法:但是有的方法,不需要復(fù)用,僅僅是使用一次就夠了,所以不需要方法名,這種方法就叫做方法。方法必須結(jié)合 委托使用。(潛在的意思就是:盡管沒有方法名了,但方法的指針還是存放在了某個委托對象中)如,現(xiàn)在為線程指定要執(zhí)行的方法的時候,就可以使用方法了。注意:1.在編譯后,會為每個象使用。方法創(chuàng)建一個 私有的靜態(tài)方法,然后將此靜態(tài)方法傳給 委托對void Test

11、()Console.Wriine(!);擴展方法為什么要有擴展方法?就是為了在不修改源碼的情況下,為某個類 增加新的方法。語法:定義靜態(tài)類,并添加 public 的靜態(tài)方法,第一個參數(shù) 代表 擴展方法的擴展類。它必須放在一個非嵌套、非泛型的靜態(tài)類中(的靜態(tài)方法);它至少有一個參數(shù);第一個參數(shù)必須附加 this 關(guān)鍵字;第一個參數(shù)不能有任何其他修飾符(out/ref)第一個參數(shù)不能是指針類型注意:1.當(dāng)把擴展方法定義到其它程序集中時,一定要注意調(diào)用擴展方法的環(huán)境中包含擴展方法所在名空間。如,在 Extention 下為 String 類添加一個擴展方法然后在頁面中使用時,要記得導(dǎo)入命名空間,否則

12、調(diào)用不到擴展方法:public sic class DogExtentionpublic sic string SayHi(this Dog dogObj)return string.Format(哈我叫0!, dogObj.Name);/使用擴展方法Dog d = new Dog() Id = 1, Name = 0094, Age = 11, Toy = new DogToy() ToyId=1, ToyName=小骨頭 ;d 就作為第一個參數(shù)傳到了擴展方法中string str = DogExtention.SayHi(d);編譯后:string str = d.SayHi();/調(diào)用擴

13、展方法,此時的對象2.擴展方法需要使用特性Exten否則報錯如下:Attribute,當(dāng)前程序中必須包含程序集 ComplilerServi,注:此程序集默認(rèn)在 FrameWork3.5 開始自動包含。3.因為擴展方法的本質(zhì)是被編譯后替換成靜態(tài)方法,所以 對象本身 可以為 null,但是在這個擴展方法中,如果了第一個參數(shù),則會報“空指針異?!薄2榭丛创a:1.通過源碼看到,在執(zhí)行 string str = d.SayHi();的地方,編譯后變成了 這個擴展方法通過靜態(tài)類的調(diào)用方式代碼。由此可見,擴展方法并沒有被擴展到 Dog 類中,只不過是在編譯的時候替換成了靜態(tài)類里的靜態(tài)方法而已。d.SayH

14、i()就是一個語法糖!思考:如果 Dog 類中本身就包含 SayHi 方法,那會怎么樣?但同時包含同名的 實例方法 和 擴展方法時,優(yōu)先調(diào)用實例方法。泛型委托回顧通過【比較接口】方式:讓 Dog 集合 根據(jù) Dog 的 id 排序,需要寫一個 IComparer接口的實現(xiàn)類,在類中重寫接口的 Compare 方法,來返回接口:正整數(shù)/0/負(fù)整數(shù)。實現(xiàn)類(比較器):然后將實現(xiàn)類對象傳入集合的 Sort 方法:使用泛型委托 +方法實現(xiàn):List集合類中包含 新的排序方法,根據(jù)泛型委托 Comparison完成比較過程??纯催@個 Comparison 泛型委托:修改調(diào)用的方法:public dele

15、gate Comparison(T x, T y);public void Sort(Comparison comparison);常用系統(tǒng)泛型委托:Lambda 表達(dá)式回顧,發(fā)現(xiàn)上面的代碼,需要傳一個方法 ,寫起來特別別扭。能否有簡化的語法呢?有!Lambda 表達(dá)式。概念:Lambda 表達(dá)式有兩種:語法:關(guān)于 泛型委托 的泛型參數(shù)列表 的 in 和 outList list = InitList();/list.FindAll(delegate(Dog d) return d.Id 2; );/1.表達(dá)式 Lambdalist.FindAll(d = d.Id 2);/ goes tol

16、ist.ForEach(d = Response.Write(d.ToString() + );/2.語句 Lambdalist.ForEach(d = if (d.Id 2) Response.Write(d.ToString() + ); );/泛型委托 的 in 泛型參數(shù) 代表 可以被作為 參數(shù)列表的類型/out 泛型參數(shù) 代表 可以被作為 返回值的類型public delegate T2 DgSay(T t1);1.System.Func 代表有返回類型的委托public delegate TResult Func();public delegate TResult Func(T arg);.注:輸入泛型參數(shù)-in 最多 16 個,輸出泛型參數(shù) -out 只有一個。 2.System.Action 代表無返回類型的委托 /list.ForEach public delegate void Action(T obj);public delegate void Action(T1 arg1, T2 arg2);.注:參數(shù)最多 16 個3.System.Predicate 代表返回 bool 類型的委托/list.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論