前言:本文開始我們便一步一步的來實現這個許可權系統的初步設計-架構搭建,首先我要說的是我們需要開發工具Visual Studio 2012或者10也行,其次是我們要有SQL Server資料庫,如果是Visual Studio 2010的話,你還要安裝MVC4的開發檔案,這個是嗎?我不記得了,誰可以回答我一下的,我一直用2012,都是整合好的,所以不太清楚。因為這篇部落格比較簡單,只是建立一個簡單的架構,所以我順便進行一下MVC的知識補充,後面我也會這樣穿插著介紹項目中遇到的技術,下面開始今天之旅。
1.自動屬性
(1)自動屬性(Auto-Implemented Properties),C#自動屬性可以避免原來我們手工的來聲明一個私人成員變數以及和屬性get,set的書寫。
複製代碼 代碼如下:
public class Kencery //聲明一個Kencery的類
{
public int ID{get;set;} //主鍵ID
public string Name{get;private set;} //唯讀屬性名稱字
public int Age{get;set;} //年齡
}
2.隱式類型var
(1)現在越來越多的項目中你可以看到var,這是什麼意思呢?其實這就是C#3.0新特性提供的隱士類型var,var關鍵字指示編譯器根據初始化語句右側的運算式推斷變數的類型。
複製代碼 代碼如下:
var Kencery=”大家晚上好”; //定義變數
var list=new List<int>(); //定義一個List集合
var Kencery=new{ID=1,Name=”HYL”,age=24} //對象初始化起定義的類型
var geners = from n in StoreContract.ProductCatalogs
where n.IsSystem == false
select n;
return View(geners);
//Linq的使用,這個在後面我們會大量的使用,大家沒學過的可以自學。
(2) var有這麼大的功能,那麼他有什麼缺點呢,我們這裡列舉大致一下
1)只有在同一個語句中聲明和初始化局部變數時,才能使用var,不能將該變數初始化為null,方法組或者匿名方法。
2)不能將var用於類範圍的域。
3)由var聲明的變數不能用在初始設定式中,換句話說,此運算式是合法的:int i=(i=20);,但是後面的這個運算式會產生編譯錯誤:var i=(i=20)。
4)不能在同一個語句中初始化多個隱式類型的變數。
5)如果範圍中有一個名為var的類型,則var關鍵字將解析為該類型名稱,而不做為隱式類型局部變數聲明的一部分去處理。
3.匿名類
(1)將一組唯讀屬性封裝到單個對象中,而無需首先顯示定義一個類型,類型名由編譯器產生,並且不能在原始碼級使用,每個屬性的類型由編譯器推斷。[var]
(2)用來初始化屬性的運算式不能是null,匿名函數和指標類型。
var Kencery=new{ID=1,Name=”HYL”,Age=24}
4.對象初始化器和集合初始化器
(1)對象初始化器是利用了編譯器對對象中對外可見的欄位或者屬性進行按序賦值,在編譯還是隱式調用了建構函式,對欄位或屬性的賦值可以是一個或者多個。
複製代碼 代碼如下:
List<Kencery> kencery=new List<Kencery>{ //Kencery類
new Kencery{ID=1,Name=”Hanyinglong”,Age=19},
New Kencery{ID=2,Name=”HYL”},
null
};
Person p=new Person{ ID=1,Name=”HYL”,Age=19 };
5.擴充方法
(1)擴充方法是一種特殊的靜態方法,它定義在一個靜態類中,但可以在其他類的對象上向調用執行個體方法那樣進行調用。因此,通過擴充方法,我們就可以在不修改一個類型的前提下對一個類型進行功能上的擴充,這種方法並不會產生新的類型,而是採用向已有類中加入新方法的方式來完成功能的擴充。
(2)在對已有類進行擴充時,我們需要將所有的擴充方法都寫在一個靜態類中,這個靜態類就相當於存放擴充方法的容器,所有的擴充方法都可以寫在這裡面。擴充方法與普通方法的聲明方式不同,擴充方法的第一個參數以this關鍵字開始,後面跟被擴充的類型,然後才是真正的參數列表。
複製代碼 代碼如下:
public static 傳回型別 擴充方法名(this 要擴充的類型 參數名稱[,擴充方法參數列表])
{
}
public static int ToInt32(this string s) //擴充方法將字串轉換為整形
{
return Int32.Parse(s);
}
6.Lambda運算式
(1) ”Lambda運算式”是一個匿名函數,他可以包含運算式和語句,可用於建立委託。
(2) 運算子 =>,該運算子讀作:”goes to”。
(3) 格式:(input parameters)=>expression
delegate bool DelDemo(int a,int b); //定義委託
DelDemo Lambda=(int a,int b)=>a>b //使用Lambda運算式表示a是否大於b
Console.WriteLine(Lambda(1,4));
7.項目整體架構流程圖
(1)上面扯了這麼多,其實跟我們今天的部落格沒什麼用,只是一些準備工作,也是複習一下這些知識點,下面我們將建立一個MVC4的程式,如何建立一個MVC4的程式,相信大家都已經會了,然後搭建架構,搭建的架構如圖所示:
(2) 然後我們再LYZJ.UserLimitMVC.Model層設計資料庫,在裡面建立一個空的Edmx模型,如圖所示:
(3) 上面我們建立了四個類庫和一個MVC4.0的項目,大家仔細看一下,如果大家對這四個類庫的作用不太明確的話,我建議大家可以去看看三層的架構,或者在下面給我留言,現在就不往出寫了。
(4) 這篇部落格到這裡就結束了,下篇部落格我們開始講述:使用面對介面編程變成對資料庫訪問層進行介紹。