覆寫及擴充產生的類別

您的 DSL 定義是在其,您可以建立一組功能強大的工具,以定義域專屬語言為基礎的平台。許多的擴充功能而地可以進行覆寫和擴充 DSL 定義所產生的類別。這些類別包括不只是網域類別明確定義在 DSL 定義圖表中,同時也定義工具箱、 檔案總管、 序列化等等的其他類別。

擴充性機制

提供多項機制可讓您擴充產生的程式碼。

Bb126289.collapse_all(zh-tw,VS.110).gif部分類別中覆寫方法

部分類別定義可讓多個位置中定義的類別。這可讓您要在您自己撰寫的程式碼產生的程式碼。在您以手動方式撰寫的程式碼中,您可藉由產生的程式碼所繼承的類別。

例如,如果在您的 DSL 定義中,您定義網域類別,名為Book,您可以撰寫自訂程式碼,將覆寫方法:

public partial class Book

{

protected override void OnDeleting()

{

MessageBox.Show("Deleting book " + this.Title);

base.OnDeleting();

} }

注意事項注意事項

若要取代產生的類別中的方法,永遠產生的檔案分隔的檔案中撰寫程式碼。一般而言,檔案會包含在名為 CustomCode 的資料夾。如果您變更產生的程式碼時,它們將會遺失的情況,當您重新產生從 DSL 定義程式碼。

要找出您可以覆寫的方法,型別覆寫在類別中,接著一個空格。IntelliSense 工具提示會告訴您什麼方法可以被覆寫。

Bb126289.collapse_all(zh-tw,VS.110).gif雙所衍生的類別

大多數的方法在產生的類別會繼承一組固定的模型命名空間中的類別。不過,某些方法會定義在產生的程式碼。一般來說,這表示您不能覆寫它們。 您無法覆寫一個部分類別中的相同類別的另一個部分定義中所定義的方法。

不過,您可以覆寫這些方法藉由設定會產生雙衍生網域類別的旗標。要產生此原因兩個類別,一個被另一個的抽象基底類別。所有方法和屬性定義在基底類別中,而且只有建構函式是在衍生類別中。

例如,在此範例為 Library.dsl, CirculationBook網域類別有GeneratesDouble Derived屬性設定成true。該網域類別產生的程式碼包含兩個類別:

  • CirculationBookBase也就是一種抽象表示,其包含了所有的方法和屬性。

  • CirculationBook其衍生自CirculationBookBase。它並不包含,但其建構函式。

若要覆寫任何方法,您建立衍生類別的部分定義如CirculationBook。您可以覆寫產生的方法,並繼承自模組化架構的方法。

您可以使用這個方法用於所有類型的項目,包括模型項目、 關聯、 圖形、 圖表和連接器。您也可以覆寫其他產生的類別的方法。有些會產生類別,例如 ToolboxHelper 永遠都是雙衍生。

Bb126289.collapse_all(zh-tw,VS.110).gif自訂的建構函式

您不能覆寫一個建構函式。即使是在雙衍生的類別建構函式必須在衍生類別中。

如果您想要提供您自己的建構函式,您可以藉由設定Has Custom Constructor在網域中類別 DSL 定義。當您按下轉換所有的範本,產生的程式碼將不會包含該類別的建構函式。它會包括遺漏的建構函式呼叫。在建置方案時就會有一份錯誤報告。按兩下 [錯誤報告以查看在產生的程式碼,說明您應該提供註解]。

有別於產生的檔案,檔案中寫入部分類別定義,並提供建構函式。

Bb126289.collapse_all(zh-tw,VS.110).gif加上標幟的擴充點

加上標幟的擴充點是在 DSL 定義,您可以在其中設定屬性或核取方塊,以表示您將會提供自訂的方法。自訂的建構函式是一個例子。其他範例包括設定Kind計算或自訂存放區,或是設定網域屬性的是自訂連接產生器] 中的旗標。

一種情況,當您設定的旗標,並重新產生程式碼,就會造成組建錯誤。按兩下該錯誤,請參閱說明您必須提供的註解。

Bb126289.collapse_all(zh-tw,VS.110).gif規則

交易管理員可讓您定義在其中指定的事件發生,例如在屬性變更為交易的結尾之前執行的規則。規則通常用於維護不同存放區中的項目之間的 synchronism。例如,規則用來確認圖表顯示出模型的目前狀態。

每個類別為基礎,可定義規則,使您不需要的程式碼的暫存器規則的每個物件。如需詳細資訊,請參閱 規則傳播模型內的變更

Bb126289.collapse_all(zh-tw,VS.110).gif儲存區事件

模組化存放區提供事件的機制,您可以用來接聽特定類型的變更在存放區,包括新增和刪除的項目,變更屬性的值,如此類推。關閉交易進行變更之後,會呼叫事件處理常式。一般而言,這些事件用來更新存放區外的資源。

Bb126289.collapse_all(zh-tw,VS.110).gif.NET 事件

您可以在圖形上的某些事件訂閱。例如,您可以接聽] 圖形上的滑鼠按鍵。您必須撰寫程式碼,每個物件的事件訂閱。這段程式碼可以由 InitializeInstanceResources() 的覆寫。

有些事件會產生 ShapeFields,這用來繪製圖形上的裝飾上。如需範例,請參閱 HOW TO:攔截圖案或 Decorator 上的點選

通常,這些事件不會發生於在交易內。如果您想要在存放區中進行變更,您應該建立的交易。