Class — Instrukcja (Visual Basic)
Deklaruje nazwę klasy i wprowadza definicję zmiennych, właściwości, zdarzeń i procedur, które składa się z klasy.
Składnia
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _
Class name [ ( Of typelist ) ]
[ Inherits classname ]
[ Implements interfacenames ]
[ statements ]
End Class
generatora
Termin | Definicja |
---|---|
attributelist |
Opcjonalny. Zobacz Lista atrybutów. |
accessmodifier |
Opcjonalny. Może być jednym z następujących elementów: - Public - Protected - Friend - Private - Protected Friend - Private Protected Zobacz Poziomy dostępu w Visual Basic. |
Shadows |
Opcjonalny. Zobacz Cienie. |
MustInherit |
Opcjonalny. Zobacz MustInherit. |
NotInheritable |
Opcjonalny. Zobacz NotInheritable. |
Partial |
Opcjonalny. Wskazuje częściową definicję klasy. Zobacz Częściowe. |
name |
Wymagany. Nazwa tej klasy. Zobacz Nazwy zadeklarowanych elementów. |
Of |
Opcjonalny. Określa, że jest to klasa ogólna. |
typelist |
Wymagane, jeśli używasz słowa kluczowego Of . Lista parametrów typu dla tej klasy. Zobacz Typ listy. |
Inherits |
Opcjonalny. Wskazuje, że ta klasa dziedziczy składowe innej klasy. Zobacz Dziedziczy instrukcję. |
classname |
Wymagane, jeśli używasz instrukcji Inherits . Nazwa klasy, z której pochodzi ta klasa. |
Implements |
Opcjonalny. Wskazuje, że ta klasa implementuje elementy członkowskie co najmniej jednego interfejsu. Zobacz Implements, instrukcja. |
interfacenames |
Wymagane, jeśli używasz instrukcji Implements . Nazwy interfejsów, które implementuje ta klasa. |
statements |
Opcjonalny. Instrukcje definiujące składowe tej klasy. |
End Class |
Wymagany. Kończy definicję Class . |
Uwagi
Instrukcja Class
definiuje nowy typ danych. Klasa jest podstawowym blokiem konstrukcyjnym programowania obiektowego (OOP). Aby uzyskać więcej informacji, zobacz Obiekty i klasy.
Można używać Class
tylko na poziomie przestrzeni nazw lub modułu. Oznacza to, że kontekst deklaracji dla klasy musi być plikiem źródłowym, przestrzenią nazw, klasą, strukturą, modułem lub interfejsem i nie może być procedurą ani blokiem. Aby uzyskać więcej informacji, zobacz Konteksty deklaracji i Domyślne poziomy dostępu.
Każde wystąpienie klasy ma okres istnienia niezależny od wszystkich innych wystąpień. Ten okres istnienia rozpoczyna się, gdy jest tworzony przez klauzulę Nowy operator lub przez funkcję, taką jak CreateObject. Kończy się, gdy wszystkie zmienne wskazujące wystąpienie zostały ustawione na wartość Nic lub wystąpień innych klas.
Klasy domyślnie mają dostęp znajomy . Możesz dostosować ich poziomy dostępu za pomocą modyfikatorów dostępu. Aby uzyskać więcej informacji, zobacz Poziomy dostępu w Visual Basic.
Reguły
Zagnieżdżenia. Można zdefiniować jedną klasę w innej. Klasa zewnętrzna jest nazywana klasą zawierającą, a klasa wewnętrzna jest nazywana klasą zagnieżdżona.
Dziedziczenia. Jeśli klasa używa instrukcji Dziedziczy, można określić tylko jedną klasę bazową lub interfejs. Klasa nie może dziedziczyć z więcej niż jednego elementu.
Klasa nie może dziedziczyć z innej klasy z bardziej restrykcyjnym poziomem dostępu. Na przykład
Public
klasa nie może dziedziczyć zFriend
klasy.Klasa nie może dziedziczyć z klasy zagnieżdżonej w niej.
Implementacji. Jeśli klasa używa instrukcji Implements, należy zaimplementować każdy element członkowski zdefiniowany przez każdy interfejs określony w elemencie
interfacenames
. Wyjątkiem jest ponowne wdrożenie składowej klasy bazowej. Aby uzyskać więcej informacji, zobacz "Reimplementation" (Ponowne wdrażanie) w temacie Implements (Implementacje).Właściwość domyślna. Klasa może określić co najwyżej jedną właściwość jako jej właściwość domyślną. Aby uzyskać więcej informacji, zobacz Domyślne.
Zachowanie
Poziom dostępu. W ramach klasy można zadeklarować każdy element członkowski z własnym poziomem dostępu. Elementy członkowskie klasy domyślnie mają dostęp publiczny , z wyjątkiem zmiennych i stałych, które domyślnie mają dostęp prywatny . Jeśli klasa ma bardziej ograniczony dostęp niż jeden z jej elementów członkowskich, poziom dostępu do klasy ma pierwszeństwo.
Zakres. Klasa jest w zakresie obejmującym przestrzeń nazw, klasę, strukturę lub moduł.
Zakresem każdego elementu członkowskiego klasy jest cała klasa.
Okres istnienia. Visual Basic nie obsługuje klas statycznych. Funkcjonalny odpowiednik klasy statycznej jest dostarczany przez moduł. Aby uzyskać więcej informacji, zobacz Instrukcja modułu.
Składowe klasy mają okresy istnienia w zależności od tego, jak i gdzie są deklarowane. Aby uzyskać więcej informacji, zobacz Okres istnienia w Visual Basic.
Kwalifikacji. Kod poza klasą musi kwalifikować nazwę elementu członkowskiego o nazwie tej klasy.
Jeśli kod wewnątrz zagnieżdżonej klasy sprawia, że niekwalifikowane odwołanie do elementu programowania, Visual Basic wyszukuje element najpierw w zagnieżdżonej klasie, a następnie w jej klasie zawierającej i tak dalej do najbardziej zewnętrznego elementu zawierającego.
Klasy i moduły
Te elementy mają wiele podobieństw, ale istnieją również pewne ważne różnice.
Terminologia. Poprzednie wersje programu Visual Basic rozpoznają dwa typy modułów: moduły klas (pliki cls) i standardowe moduły (pliki bas). Bieżąca wersja wywołuje odpowiednio te klasy i moduły.
Udostępnione elementy członkowskie. Możesz kontrolować, czy element członkowski klasy jest elementem członkowskim współużytkowanego, czy wystąpienia.
Orientacja obiektu. Klasy są obiektowe, ale moduły nie. Można utworzyć co najmniej jedno wystąpienie klasy. Aby uzyskać więcej informacji, zobacz Obiekty i klasy.
Przykład
W poniższym przykładzie użyto instrukcji , aby zdefiniować klasę Class
i kilka elementów członkowskich.
Class BankAccount
Shared interestRate As Decimal
Private accountBalance As Decimal
Public holdOnAccount As Boolean = False
Public ReadOnly Property Balance() As Decimal
Get
Return accountBalance
End Get
End Property
Public Sub PostInterest()
accountBalance = accountBalance * (1 + interestRate)
End Sub
Public Sub PostDeposit(ByVal amountIn As Decimal)
accountBalance = accountBalance + amountIn
End Sub
Public Sub PostWithdrawal(ByVal amountOut As Decimal)
accountBalance = accountBalance - amountOut
End Sub
End Class