[ Pobierz całość w formacie PDF ]

wodują zgłoszenia wyjątku. Jednak próba sprawdzania wartości właściwości Value
w sytuacji, kiedy zmienna ma wartość null, spowoduje zgłoszenie przez platformę .NET
wyjątku InvalidOperationException.
Typy (klasy) częściowe
Typy częściowe to mechanizm służący do definiowania pojedynczych klas, struktur lub in-
terfejsów w kilku plikach. W rzeczywistości w czasie kompilacji kodu nie ma czegoś takiego
jak typ częściowy. Takie typy istnieją jedynie w czasie tworzenia aplikacji. Na etapie kom-
pilacji zawartość plików definiujących typ częściowy jest łączona w pojedynczą klasę.
Typy częściowe mają rozwiązywać dwa problemy. Po pierwsze, umożliwiają programistom
rozbijanie dużych klas na kilka plików. Pozwala to różnym członkom zespołu pracować
nad tą samą klasą bez konieczności korzystania z tego samego pliku (dzięki czemu uni-
ka się związanych z tym problemów z łączeniem kodu). Po drugie, pozwalają na od-
dzielenie kodu wygenerowanego przez narzędzia od kodu autorstwa programisty. Dzięki
temu plik z kodem programisty będzie przejrzysty (ponieważ jedynie on go pielęgnuje),
a na zapleczu narzędzie może generować inne elementy klasy. Programiści używający
Visual Studio 2005 natychmiast zauważą to, kiedy będą korzystać z formularzy Windows,
nakładek na usługi sieciowe, stron z kodem ukrytym ASP i podobnych narzędzi. Jeśli
korzystałeś z tych elementów w poprzednich wersjach .NET, szybko spostrzeżesz, że
w wersji 2005 w plikach nie ma wygenerowanego kodu, a klasa pisana przez programistę
jest oznaczona jako partial.
Używanie typów częściowych
Typy częściowe zarówno w C#, jak i w Visual Basic deklaruje się za pomocą słowa klu-
czowego Partial. Można stosować to słowo kluczowe do klas, struktur i interfejsów. Musi
ono być pierwszym słowem w deklaracji (przed Class, Structure czy Interface). Wska-
zanie, że typ jest częściowy, informuje kompilator o tym, że należy połączyć części tej
klasy w pojedynczym pliku .dll lub .exe.
Przy definiowaniu typów częściowych trzeba stosować się do kilku prostych wskazówek.
Po pierwsze, w deklaracji wszystkich typów o tej samej nazwie w tej samej przestrzeni
nazw musi znajdować się słowo kluczowe Partial. Nie można na przykład zadeklarować
klasy Partial Public Person w jednym pliku, a klasy Public Person w innym pliku tej
samej przestrzeni nazw  trzeba dodać słowo kluczowe Partial także do drugiej dekla-
racji. Po drugie, trzeba pamiętać, że wszystkie modyfikatory typu częściowego są łączone
w czasie kompilacji. Obejmuje to atrybuty klasy, komentarze XML i implementacje in-
terfejsu. Na przykład jeśli programista użył atrybutu System.SerializableAttribute dla
Rozdział 3. Rozszerzenia platformy i języków .NET w wersji 2005 89
typu częściowego, ten atrybut zostanie zastosowany do tego typu w czasie jego łączenia
i kompilacji. Po trzecie, warto pamiętać, że wszystkie typy częściowe muszą zostać skom-
pilowane do tego samego podzespołu (inaczej pakietu, czyli pliku .dll lub .exe; ang. as-
sembly). Nie można skompilować typu częściowego obecnego w kilku podzespołach.
Właściwości z mieszanym poziomem dostępu
W poprzednich wersjach .NET można było określić poziom dostępu (publiczny, prywatny,
chroniony, wewnętrzny) jedynie dla całej właściwości. Jednak często potrzebna jest wła-
ściwość umożliwiająca publiczny odczyt (get), ale tylko wewnętrzny zapis (set). Jedy-
nym sensownym rozwiązaniem w poprzednich wersjach .NET było pominięcie metody
set właściwości. Następnie trzeba było utworzyć nową metodę wewnętrzną służącą do
ustawiania wartości tej właściwości. Kod byłby łatwiejszy do napisania i zrozumienia,
gdyby możliwa była bardziej precyzyjna kontrola nad modyfikatorami dostępu w obrębie
właściwości.
.NET 2.0 daje kontrolę nad modyfikatorami dostępu metod set i get właściwości. Dla-
tego można oznaczyć właściwość jako publiczną, ale oznaczyć metodę set jako prywatną
lub chronioną. Poniżej znajduje się przykładowy kod:
Właściwość z mieszanym poziomem dostępu w C#:
private string _userId;
public string UserId {
get { return _userId; }
internal set { userId = value; }
}
Właściwość z mieszanym poziomem dostępu w VB:
Private _userId As String
Public Property UserId() As String
Get
Return _userId
End Get
Friend Set(ByVal value As String)
_userId = value
End Set
End Property
Wieloznaczne przestrzenie nazw
W przypadku dużych projektów mogą wystąpić konflikty przestrzeni nazw między sobą
oraz z platformą .NET (przestrzeń nazw System). Wcześniej nie można było rozwiązać
takich wieloznacznych referencji i na etapie kompilacji pojawiał się wyjątek.
.NET 2.0 umożliwia programistom zdefiniowanie własnej przestrzeni nazw System bez
blokowania dostępu do wersji platformy .NET. Załóżmy, że programista zdefiniował prze-
strzeń nazw System i nagle utracił możliwość dostępu do jej globalnej wersji. W języku C#
90 Część I Wprowadzenie do Visual Studio 2005 i .NET
należy dodać wtedy słowo kluczowe global wraz z kwalifikatorem aliasu przestrzeni
nazw ::, tak jak w poniższym wierszu:
global::System.Double myDouble;
W Visual Basic składnia jest podobna, ale używane słowo kluczowe to Global:
Dim myDouble As Global.System.Double [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • sklep-zlewaki.pev.pl