Różnice między cieniowanie i przesłanianie (Visual Basic)
Po zdefiniowaniu klasy, która dziedziczy z klasy bazowej, czasami trzeba na nowo zdefiniować jeden lub więcej elementów klasy podstawowej w klasie pochodnej.Cieniowanie i nadrzędne są dostępne w tym celu.
Porównanie
Cieniowanie i przesłanianie zarówno używane podczas pochodnych klasa dziedziczy z klasy podstawowej, i zarówno ponownie zdefiniować jeden element deklarowanej na inny.Jednak istnieją znaczne różnice między tymi dwoma.
W poniższej tabeli porównano przesłanianie z przesłanianie.
Punkt Porównanie |
Cieniowanie |
Przesłanianie |
Cel |
Chroni przed kolejnych zmianach klasy base, który wprowadza członka, który już został zdefiniowany w klasie pochodnej |
Osiąga polimorfizm przez definiowanie różnych realizacji procedury lub właściwości z samej sekwencja wywoływania1 |
Element przedefiniować |
Zadeklarowany dowolny typ elementu |
Tylko w procedurze (Function, Sub, lub Operator) lub właściwość |
Zmiana definicji elementu |
Zadeklarowany dowolny typ elementu |
Tylko procedury lub właściwości z identycznych sekwencja wywoływania1 |
Zmiana definicji elementu poziom dostępu |
Każdy poziom dostępu |
Nie można zmienić poziom dostępu przesłonięte elementu |
Czytelności i writability z przedefiniowanie elementu |
Dowolna kombinacja |
Nie można zmienić czytelności lub writability zastąpiona właściwość |
Kontrola nad przedefiniowanie |
Element klasy podstawowej nie można wymusić lub zakazać cieniowanie |
Można określić elementu klasy podstawowej MustOverride, NotOverridable, lubOverridable |
Użycie słowa kluczowego |
ShadowsZaleca się w klasie pochodnej; Shadowszakłada, że jeśli ani Shadows ani Overrides określonego2 |
Overridablelub MustOverride wymaganych w klasie podstawowej; Overrideswymagane w klasie pochodnej |
Dziedziczenie przedefiniowanie elementu przez klasy wywodzące się z klasy pochodne |
Przesłanianie elementu dziedziczone przez dalsze uzyskane klas; tekst z cieniem element nadal ukryte3 |
Przesłanianie elementu dziedziczone przez dalsze uzyskane klas; zastąpiona element nadal jest zastąpiona |
1Sekwencja wywoływania składa się z typu elementu (Function, Sub, Operator, lub Property), nazwa, lista parametrów i zwraca typ.Nie można zastąpić procedurę z właściwością lub na odwrót.Nie można zastąpić jeden rodzaj procedury (Function, Sub, lub Operator) z innego rodzaju.
2 , Jeśli nie określisz albo Shadows lub Overrides, kompilator generuje ostrzeżenie, aby pomóc Ci się, jakiego rodzaju dokonanym chcesz użyć.Jeśli możesz zignorować ostrzeżenie, używany jest mechanizm przesłaniania.
3 , Jeśli element przesłaniania jest niedostępne w klasie pochodnej dalsze, cieniowanie nie jest dziedziczona.Na przykład zadeklarować przesłaniania element jako Private, wynikające z Klasa pochodna klasy dziedziczy oryginalnego elementu zamiast elementu przesłaniania.
Wytyczne
Zwykle korzystasz, zastępując w następujących przypadkach:
Podczas definiowania polimorficzne klas pochodnych.
Chcesz bezpieczeństwa mających kompilatora, wymuszanie typu elementu identyczne i sekwencja wywoływania.
Zwykle korzystasz, cieniowanie w następujących przypadkach:
Przewidywania, że klasy podstawowej mogą być modyfikowane i zdefiniować element przy użyciu tej samej nazwie jak Twój.
Mają swobodę zmiany typu element lub sekwencja wywoływania.
Zobacz też
Zadania
Jak: ukrywanie zmiennej z taką samą nazwę jak zmienna (Visual Basic)
Jak: ukrywanie zmiennej dziedziczone (Visual Basic)
Jak: dostęp do zmiennej ukryte w klasie pochodnej (Visual Basic)