Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby zadeklarować zmienną obiektu, należy użyć instrukcji deklaracji normalnej. Dla typu danych należy określić Object
(czyli typ danych obiektu) lub bardziej szczegółową klasę, z której ma zostać utworzony obiekt.
Deklarowanie zmiennej jako Object
jest takie samo jak deklarowanie jej jako System.Object.
Po zadeklarowaniu zmiennej z określoną klasą obiektu może ona uzyskać dostęp do wszystkich metod i właściwości uwidocznionych przez daną klasę i klasy, z których dziedziczy. Jeśli zadeklarujesz zmienną za pomocą Object, będzie ona mogła uzyskiwać dostęp tylko do członków klasy Object, chyba że włączysz Option Strict Off
, aby umożliwić późne wiązanie.
Składnia deklaracji
Użyj następującej składni, aby zadeklarować zmienną obiektu:
Dim variablename As [New] { objectclass | Object }
W deklaracji można również określić publiczne, chronione, znajome, Protected Friend
prywatne, udostępnione lub statyczne. Następujące przykładowe deklaracje są prawidłowe:
Private objA As Object
Static objB As System.Windows.Forms.Label
Dim objC As System.OperatingSystem
Późne wiązanie i wczesne wiązanie
Czasami określona klasa jest nieznana do momentu uruchomienia kodu. W takim przypadku należy zadeklarować zmienną obiektu z typem Object
danych. Spowoduje to utworzenie ogólnego odwołania do dowolnego typu obiektu, a określona klasa jest przypisywana w czasie wykonywania. Jest to nazywane późnym powiązaniem. Opóźnione powiązanie wymaga dodatkowego czasu na wykonanie. Ogranicza również kod do metod i właściwości klasy, do której został ostatnio przypisany. Może to spowodować błędy czasu wykonywania, jeśli twój kod próbuje uzyskać dostęp do członków innej klasy.
Gdy znasz konkretną klasę w czasie kompilacji, należy zadeklarować zmienną obiektu, która ma być tej klasy. Jest to nazywane wczesnym powiązaniem. Wczesne powiązanie poprawia wydajność i gwarantuje dostęp kodu do wszystkich metod i właściwości określonej klasy. W poprzednich przykładowych deklaracjach, jeśli zmienna objA
używa tylko obiektów klasy System.Windows.Forms.Label, należy określić As System.Windows.Forms.Label
w jego deklaracji.
Zalety wczesnego wiązania
Deklarowanie zmiennej obiektu jako konkretnej klasy daje kilka zalet:
Automatyczne sprawdzanie typów
Gwarantowany dostęp do wszystkich członków określonej klasy
Obsługa funkcji Microsoft IntelliSense w Edytorze kodu
Ulepszona czytelność kodu
Mniej błędów w kodzie
Błędy przechwycone w czasie kompilacji, a nie w czasie wykonywania
Szybsze wykonywanie kodu
Dostęp do składowych zmiennych obiektów
Kiedy Option Strict
zostanie włączony On
, zmienna obiektu może uzyskiwać dostęp tylko do metod i właściwości klasy, za pomocą której ją deklarujesz. Poniższy przykład ilustruje to.
' Option statements must precede all other source file lines.
Option Strict On
' Imports statement must precede all declarations in the source file.
Imports System.Windows.Forms
Public Sub accessMembers()
Dim p As Object
Dim q As System.Windows.Forms.Label
p = New System.Windows.Forms.Label
q = New System.Windows.Forms.Label
Dim j, k As Integer
' The following statement generates a compiler ERROR.
j = p.Left
' The following statement retrieves the left edge of the label in pixels.
k = q.Left
End Sub
W tym przykładzie p
może używać tylko elementów Object samej klasy, ale nie obejmuje właściwości Left
. Z drugiej strony q
został zadeklarowany jako typ Label, więc może używać wszystkich metod i właściwości Label klasy w System.Windows.Forms przestrzeni nazw.
Elastyczność zmiennych obiektu
Podczas pracy z obiektami w hierarchii dziedziczenia można wybrać klasę, która ma być używana do deklarowania zmiennych obiektów. W ten sposób należy zrównoważyć elastyczność przypisywania obiektów względem dostępu do składowych klasy. Rozważmy na przykład hierarchię System.Windows.Forms.Form dziedziczenia, która prowadzi do klasy:
Załóżmy, że aplikacja definiuje klasę formularza o nazwie specialForm
, która dziedziczy z klasy Form. Można zadeklarować zmienną obiektu, która odnosi się konkretnie do specialForm
, jak pokazano w poniższym przykładzie.
Public Class specialForm
Inherits System.Windows.Forms.Form
' Insert code defining methods and properties of specialForm.
End Class
Dim nextForm As New specialForm
Deklaracja w poprzednim przykładzie ogranicza zmienną nextForm
do obiektów klasy specialForm
, ale także udostępnia wszystkie metody i właściwości specialForm
dla nextForm
, a także wszystkie elementy członkowskie wszystkich klas, z których specialForm
dziedziczy.
Możesz uczynić zmienną obiektu bardziej ogólną przez zadeklarowanie jej jako typ Form, jak pokazano w poniższym przykładzie.
Dim anyForm As System.Windows.Forms.Form
Deklaracja w poprzednim przykładzie umożliwia przypisanie dowolnego formularza w aplikacji do elementu anyForm
. Jednak pomimo tego, że anyForm
ma dostęp do wszystkich elementów klasy Form, nie może używać żadnych dodatkowych metod ani właściwości zdefiniowanych dla specyficznych formularzy, takich jak specialForm
.
Wszystkie elementy członkowskie klasy bazowej są dostępne dla klas pochodnych, ale dodatkowe elementy członkowskie klasy pochodnej są niedostępne dla klasy bazowej.