Udostępnij za pośrednictwem


Zastępowanie i rozszerzanie klas generowanych

Definicja sieci DSL jest platformę, na której można budować zaawansowany zestaw narzędzi, które są oparte na języku specyficzne dla domeny.Wiele rozszerzeń i dostosowania jest możliwe przesłanianie i rozszerzanie klas, które są generowane na podstawie definicji DSL.Klasy te obejmują nie tylko klasy domeny zdefiniowane jawnie na diagramie definicji DSL, ale także innych klas, które definiują przybornik, explorer, serializacji i tak dalej.

Mechanizmy rozszerzeń

Kilka mechanizmów są dostarczane do umożliwiają rozszerzenie wygenerowany kod.

Bb126289.collapse_all(pl-pl,VS.110).gifPrzesłanianie metod w klasie częściowe

Definicje klasy częściowe umożliwiają klasy określonych w więcej niż jednym miejscu.Pozwala to na oddzielnych wygenerowany kod z pola Kod napisany ręcznie.W kodzie napisane ręcznie można zastąpić dziedziczone przez wygenerowany kod klasy.

Na przykład, jeżeli w Państwa definicji DSL można zdefiniować klasę domeny o nazwie Book, można napisać kod niestandardowy, który dodaje override metod:

public partial class Book

{

protected override void OnDeleting()

{

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

base.OnDeleting();

} }

[!UWAGA]

Aby zastąpić metody w klasie generowanych, zawsze pisać kodu w pliku, która jest oddzielona od wygenerowanych plików.Zazwyczaj plik znajduje się w folderze o nazwie CustomCode.Po wprowadzeniu zmian do wygenerowanego kodu będą utracone podczas generowania kodu z definicji DSL.

Wykrywanie metod, jakie można zastąpić, zastąpić typu klasy, a po nim spację.Wskazówka IntelliSense stwierdzić, jakie metody może zostać zastąpiona.

Bb126289.collapse_all(pl-pl,VS.110).gifKlas pochodnych podwójne

Większość metod klas generowanych są dziedziczone z ustalony zbiór klas w przestrzeni nazw modelowania.Jednak niektóre metody są zdefiniowane w generowanym kodzie.Zwykle oznacza to, że nie można zastąpić je; w jednej klasie częściowe nie może zastąpić metody, które są zdefiniowane w innej definicji częściowej tej samej klasy.

Niemniej jednak, metody te można zastąpić przez ustawienie Generuje podwójne uzyskane flagi dla klasy domeny.To powoduje, że dwie klasy zostanie wygenerowany, z których jeden jest abstrakcyjna klasa podstawowa, z drugiej strony.Wszystkie definicje metod i właściwości są w klasie bazowej, a tylko Konstruktora znajduje się w klasie pochodnej.

Na przykład, w próbce, Library.dsl CirculationBook klasa domeny ma GeneratesDouble Derived właściwość wartość true.Wygenerowany kod dla tej klasy domeny zawiera dwie klasy:

  • CirculationBookBase, który jest abstrakcyjna i który zawiera wszystkie metody i właściwości.

  • CirculationBook, który wywodzi się z CirculationBookBase.Jest pusty, z wyjątkiem dla jego konstruktorów.

Aby zastąpić dowolną metodę, należy utworzyć definicji częściowej klasy pochodne takich jak CirculationBook.Można zastąpić zarówno wygenerowanej metody, jak i metody dziedziczone w ramach modelowania.

Za pomocą tej metody ze wszystkimi typami element, w tym elementy modelu, relacje, kształty, diagramy i łączniki.Można także zastąpić metody innych klas generowanych.Niektóre generowane klas takich jak ToolboxHelper są zawsze uzyskane podwójne.

Bb126289.collapse_all(pl-pl,VS.110).gifKonstruktory niestandardowe

Nie można zastąpić konstruktora.Nawet w przypadku klas pochodnych podwójne Konstruktor musi być w klasie pochodnej.

Jeśli chcesz podać własne konstruktora, można to zrobić, ustawiając Has Custom Constructor dla klasy domeny w definicji DSL.Po kliknięciu przycisku Transform wszystkie szablony, wygenerowany kod nie będzie zawierać konstruktora dla klasy.Obejmie to wywołanie konstruktora brakujące.Powoduje to raport o błędach podczas konstruowania roztworu.Kliknij dwukrotnie raport o błędach, aby wyświetlić komentarz w generowanym kodzie, wyjaśniający, należy dostarczyć.

Napisz definicji częściowej klasy w pliku, który jest odseparowany od wygenerowanych plików oraz zapewniają konstruktora.

Bb126289.collapse_all(pl-pl,VS.110).gifOflagowane punkty rozszerzenia

Punkt oflagowane rozszerzenia to miejsce w definicji DSL, gdzie można ustawić właściwość lub pole wyboru, aby wskazać zapewni metody niestandardowe.Niestandardowe konstruktory są jednym z przykładów.Inne przykłady obejmują ustawienia Kind właściwości domeny obliczona lub składowania niestandardowe lub ustawienia Jest niestandardowa flagi w konstruktorze połączenia.

W każdym przypadku gdy należy ustawić flagę i generowania kodu, błąd kompilacji spowoduje.Kliknij dwukrotnie błąd, można wyświetlić komentarz wyjaśniający, musisz podać.

Bb126289.collapse_all(pl-pl,VS.110).gifZasady

Menedżer transakcji umożliwia definiowanie reguł, które są uruchamiane przed zakończeniem transakcji, w którym wystąpił wyznaczonych zdarzenia, takie jak zmiana właściwości.Reguły są zazwyczaj używane do utrzymania synchronism między różne elementy w magazynie.Na przykład aby upewnić się, że diagram Wyświetla bieżący stan modelu są wykorzystywane reguły.

Reguły są definiowane na podstawie na klasy, tak, aby nie trzeba mieć kod rejestruje, reguła dla każdego obiektu.Aby uzyskać więcej informacji, zobacz Zasady propagowanie zmian w ramach modelu.

Bb126289.collapse_all(pl-pl,VS.110).gifZdarzenia magazynu

Magazyn modelowania udostępnia mechanizm zdarzenie, którego można używać do nasłuchiwania dla określonych typów zmian w magazynie, w tym dodawanie i usuwanie elementów, zmiany wartości właściwości i tak dalej.Programy obsługi zdarzeń są nazywane po zamknięciu transakcji, w którym wprowadzono zmiany.Zazwyczaj zdarzenia te są używane do aktualizacji zasobów poza magazynu.

Bb126289.collapse_all(pl-pl,VS.110).gif.Zdarzenia netto

Niektóre zdarzenia na kształtach można subskrybować.Na przykład można wykrywać kliknięcia myszy na kształcie.Mieć jest napisanie kodu, który subskrybuje zdarzenia dla każdego obiektu.Ten kod może być napisana w przesłonięcie InitializeInstanceResources().

Niektóre zdarzenia są generowane na ShapeFields, które są używane do kreślenia dekoratorów na kształcie.Na przykład, zobacz Jak: Przechwytywanie kliknij kształt lub Dekorator.

Zdarzenia te zazwyczaj nie występują wewnątrz transakcji.Należy utworzyć transakcję, jeśli chcesz wprowadzić zmiany w magazynie.