1. 程式人生 > >《ASP.NET MVC企業實戰》(二) MVC開發前奏

《ASP.NET MVC企業實戰》(二) MVC開發前奏

在上一篇“《ASP.NET MVC企業級實戰》(一)MVC開發前奏”中記錄了作者介紹的一些比較實用的VS使用方法以及C#2.0中新增的新特性。本篇繼續大概瞭解之後版本的一些新特性。

一、C#3.0/3.5新特性

a)自動屬性

屬性的目的是為了封裝欄位和控制對欄位的讀寫許可權,使用自動屬性可以用類似public int ID{get;set;}這樣的方式簡化屬性的實現,自動生成對應的欄位。這種寫法增加了編譯器的工作量,但不會對執行效率產生影響。

b)隱式型別推斷var

使用var宣告一個物件時,編譯器會自動根據賦值語句推斷這個變數的型別。var還可用於匿名類的宣告。用var宣告變數時有一些限制:

被宣告的變數必須是一個區域性變數,而不是靜態或例項欄位;

變數必須在宣告的同時被初始化;

初始化的物件不能是一個匿名函式;

變數聲明後型別不能更改;

賦值的資料型別必須是可以在編譯時確定的型別。

c)物件集合初始化器

分為物件初始化、集合初始化兩種:

物件初始化時可以這樣寫:User user=new User{Id=1,Name=””};

集合初始化時的寫法可以為:User users=new List<Users>{new User{Id=1,Name=”1”},newUser{Id=2,Name=”2”}};

d)匿名類

使用匿名類可以將一組只讀屬性封裝到物件中,匿名物件可以用var來宣告。例如var user=new User{Id=1,Name=””};這種寫法方便靈活,但要避免濫用,否則會造成程式碼重複、降低可維護性等問題。

e)擴充套件方法

基本使用方法為:

這裡被擴充套件的型別為string,則string前需要加this,而且所在的類必須為靜態的。編譯器在碰到str.WriteSelf這樣的寫法時,首先會尋找名稱為WriteSelf的例項方法,沒有找到後就認為是一個擴充套件方法,然後就在當前相關的名稱空間中尋找匹配的擴充套件方法。

擴充套件方法至少需要有一個引數,而且第一個引數不能有任何其他修飾符(ref/out),也不能為指標型別編寫擴充套件方法。

f)系統內建委託

系統內建委託如Func、Action、Predicate、Comparison等,可以被方便得使用,而不必在使用前自己宣告簽名。

Action

有16個過載,引數個數從1-16。

Func有17個過載,代表一類有若干(0~16個)輸入引數,1個輸出的簽名。

Predicate委託如下,用來判斷輸入引數是否符合某種條件,條件要自己定,返回值就是bool了。

Comparison委託用來比較兩個引數。

學習資料:ASP.NET MVC 企業級實戰 by 鄒瓊俊