介紹
從.NET 3.5開始,.NET提供了概念模型(conceptual model)的 Entity Framework,概念模型可以根據資料庫(Database First)建立 Model 與資料庫的對應關係,並且存成 XML 檔案,副檔名為 EDMX,讓你可以有 GUI 來管理 Model,如下圖。
.NET4.0(EF4),推出了 Model First,可以先不用先有資料庫,而從概念模型定義 Model 是什麼,進而產生實體資料庫。EF4 提供了 Model First 跟 Database First 的方式來管理 Model,而用 Model First 與 Database First 都是需要用到 EDMX 來產生對應的 Model Class。
EF4同時也推出了新的管理 Model 的方式,稱為 Code First。使用 Code First 不需要有 EDMX來做 Model 的管理。沒有了EDMX,Code First 使用 POCO classes來定義 domain model。
Code First, Database First 和 Model First 都是為了使用 Entity Framework 建立 Entity Data Model 的方式。其實 Entity Framework 不管如何建立 Model,因為在有 Model 後,Entity Framework 在 runtime 所做的行為都是是一樣的。
無論是選擇 EDMX 來管理 Model 或者是 Code-based Modeling 來管理 Model 其實都是可以達成目的。根據下圖,可以了解之間的差別。
this
透過 this 關鍵字可以直接存取所屬物件的屬性與方法,常用於 method 的參數名稱與屬性名稱重複的時候。base 關鍵字也是類似原理,只是 base 存取的對象是基底類別 (base class)
class Fruits
{
private string type = "香蕉"; //私有變數與方法參數名稱相同
public void GetFruit(string type)
{
Charles changed 3 years agoView mode Like Bookmark
說明
抽象(abstract)通常表示一種想法、意念,而非真正的實體,當一個類別使用關鍵字 abstract 宣告,表示其為抽象類別,提供其他衍生類別共同的製作樣版。例如建築公司根據房屋樣版模型建造房屋,而各種房屋均擁有出入大門、各式起居房間、衛浴等共同的設施,但是門如何開、房間如何裝潢,則於建造完成進行裝潢時依據屋主需求而定。
抽象類別正是這樣的概念,就如同你無法住在只建好外觀的房屋裏是一樣的,抽象類別本身無法產生實體物件,而且抽象類別包含了一個以上的抽象方法,這些方法只提供函式名稱與參數設定,並且由繼承的衍生類別實作,衍生類別同時必須實作所有抽象類別的方法,否則其本身將成為另一個抽象類別。
左邊的抽象類別 A 以虛線作表示,由於抽象類別並沒有完整的實作內容,因此無法建立成為物件實體,右邊則是繼承抽象類別的實體類別 B ,其中實作了抽象類別所定義的抽象成員aMethod 。
類別 B 由於完成了抽象成員aMethod的實作,因此本身是一個完整的類別,除了可以建立物件,同時可根據需求,進一步擴充其內容,就如同一般的類別。
定義抽象類別
Charles changed 5 years agoView mode Like Bookmark
說明
如果一個繼承抽象類別的衍生類別,本身又包含了抽象成員,則這個類別還是必須以 abstract 關鍵字進行修飾,它本身依然是一個不折不扣的抽象類別,也因此無法被用來建立實體物件。
類別 A 為一抽象類別,而類別 B 雖然繼承了類別 A ,但是由於其中另外定義了一個抽象成員bMethod,因此這個類別依然是一個抽象類別,類別 C 繼承了類別 B ,覆寫其中的抽象成員bMethod,成為一個實體類別,這三個類別當中,只有類別 C 可以用來建立實體物件。
範例
建立抽象類別
TemplateClass只定義了兩個抽象的方法成員,Length與Area
abstract class TemplateClass
Charles changed 5 years agoView mode Like Bookmark