Tematyka kilku ostatnich notatek związana jest z obiektowością, zaczynając od obiektowość w pigułce, dziedziczenie, metody wirtualne, abstrakcyjne oraz ostateczne, a kończąc na tworzeniu obiektów. Mimo to cały czas jest o czym pisać. Również w kolejnych notatkach pozostaniemy w tym temacie.
W tej krótkiej notatce zaprezentuję słowo kluczowe partial
, umożliwiające tworzenie częściowych definicji klas, czyli takich, których definicja może zostać zapisana w kilku plikach źródłowych. Dzięki użyciu partial
, kompilator nie zwróci nam błędu, skarżąc się, że dany typ został kilkukrotnie zdefiniowany.
partial class Square
{
public int A { get; set; }
}
partial class Square
{
public virtual int CalcArea()
{
return A * A;
}
}
Funkcjonalność została wprowadzona w celu ułatwienia pracy narzędziom generującym kod. Sam Visual Studio korzysta z takich narzędzi. Dla przykładu, tworząc interfejs użytkownika w technologii WinForms, generowane są dwa pliki. Pierwszy z nich, domyślnie zawiera konstruktor wywołujący metodę inicjalizującą InitializeComponent. Plik ten przeznaczony jest na zmiany wprowadzane przez programistę, najczęściej dotyczące działania samego formularza. Natomiast drugi plik przechowuje "ustawienia" umożliwiające przygotowanie formularza, między innymi metodę InitializeComponent.
Być może zastanawiasz się, dlaczego tak to zostało zaprojektowane? Odpowiedź jest prosta. W sytuacji, gdyby generowany był wyłącznie jeden plik zawierający zarówno zmiany wprowadzane przez programistę, jak i kod generowany automatycznie, istniałoby ryzyko utraty zmian wprowadzonych przez programistę. W sytuacji, gdyby pojawiła się konieczność ponownego wygenerowania całego kodu, narzędzie musiałoby określić, jakie zmiany zostały wprowadzone oraz jak je przenieść do nowo wygenerowanego kodu. Jeżeli jednak klasa zostanie rozbita na dwa osobne pliki, o problemie możemy zapomnieć.
Troska Robert