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.
Obiekt jest kombinacją kodu i danych, które mogą być traktowane jako jednostka. Obiekt może być elementem aplikacji, na przykład kontrolką lub formularzem. Cała aplikacja może być również obiektem.
Podczas tworzenia aplikacji w visual basic stale pracujesz z obiektami. Można używać obiektów udostępnianych przez visual basic, takich jak kontrolki, formularze i obiekty dostępu do danych. Można również używać obiektów z innych aplikacji w aplikacji Visual Basic. Można nawet utworzyć własne obiekty i zdefiniować dla nich dodatkowe właściwości i metody. Obiekty działają jak prefabrykowane bloki konstrukcyjne dla programów — pozwalają na jednorazowe napisanie fragmentu kodu i jego wielokrotne używanie.
W tym temacie omówiono szczegółowo obiekty.
Obiekty i klasy
Każdy obiekt w Visual Basic jest definiowany przez klasę. Klasa opisuje zmienne, właściwości, procedury i zdarzenia obiektu. Obiekty są wystąpieniami klas; możesz utworzyć dowolną liczbę obiektów, ile potrzebujesz po zdefiniowaniu klasy.
Aby zrozumieć relację między obiektem a jego klasą, pomyśl o foremkach do ciastek i ciastkach. Foremka do ciastek jest klasą. Definiuje cechy każdego pliku cookie, na przykład rozmiar i kształt. Klasa służy do tworzenia obiektów. Obiekty są plikami cookie.
Przed uzyskaniem dostępu do jego składowych należy utworzyć obiekt, z wyjątkiem Shared
elementów członkowskich, do których można uzyskać dostęp bez obiektu klasy.
Tworzenie obiektu na podstawie klasy
Określ, z której klasy chcesz utworzyć obiekt, lub zdefiniuj własną klasę. Przykład:
Public Class Customer Public Property AccountNumber As Integer End Class
Napisz instrukcję Dim , aby utworzyć zmienną, do której można przypisać wystąpienie klasy. Zmienna powinna być typu żądanej klasy.
Dim nextCustomer As Customer
Dodaj słowo kluczowe New Operator , aby zainicjować zmienną do nowego wystąpienia klasy.
Dim nextCustomer As New Customer
Teraz możesz uzyskać dostęp do składowych klasy za pośrednictwem zmiennej obiektu.
nextCustomer.AccountNumber = lastAccountNumber + 1
Uwaga / Notatka
Jeśli to możliwe, należy zadeklarować zmienną jako typ klasy, któremu zamierzasz ją przypisać. Jest to nazywane wczesnym powiązaniem. Jeśli nie znasz typu klasy w czasie kompilacji, możesz wywołać opóźnione powiązanie , deklarując zmienną jako typ danych obiektu. Jednak opóźnione powiązanie może zmniejszyć szybkość działania i ograniczyć dostęp do członków obiektu czasu wykonania. Aby uzyskać więcej informacji, zobacz Deklaracja zmiennej obiektu.
Wiele wystąpień
Obiekty nowo utworzone na podstawie klasy są często identyczne ze sobą. Gdy jednak istnieją jako pojedyncze obiekty, ich zmienne i właściwości można zmienić niezależnie od innych wystąpień. Jeśli na przykład dodasz trzy pola wyboru do formularza, każdy obiekt pola wyboru jest wystąpieniem CheckBox klasy. CheckBox Poszczególne obiekty mają wspólny zestaw cech i możliwości (właściwości, zmiennych, procedur i zdarzeń) zdefiniowanych przez klasę. Jednak każda z nich ma własną nazwę, może być oddzielnie włączona i wyłączona i może zostać umieszczona w innej lokalizacji w formularzu.
Składowe obiektu
Obiekt jest elementem aplikacji reprezentującym wystąpienie klasy. Pola, właściwości, metody i zdarzenia to bloki konstrukcyjne obiektów i stanowią ich składowe.
Dostęp do członków
Dostęp do elementu członkowskiego obiektu można uzyskać, określając w kolejności nazwę zmiennej obiektu, kropkę (.
) i nazwę elementu członkowskiego. Poniższy przykład ustawia Text właściwość Label obiektu.
warningLabel.Text = "Data not saved"
Lista elementów IntelliSense
Funkcja IntelliSense wyświetla elementy członkowskie klasy, gdy wywołujesz opcję Lista członków, na przykład gdy wpisujesz kropkę (.
) jako operator dostępu do elementów. Jeśli wpiszesz kropkę po nazwie zmiennej zadeklarowanej jako egzemplarz tej klasy, funkcja IntelliSense wyświetli listę wszystkich elementów członkowskich egzemplarza i żadnych elementów wspólnych. Jeśli wpiszesz kropkę po nazwą klasy, funkcja IntelliSense wyświetli listę wszystkich wspólnych elementów członkowskich i nie pokazuje elementów członkowskich wystąpienia. Aby uzyskać więcej informacji, zobacz Using IntelliSense (Używanie funkcji IntelliSense).
Pola i właściwości
Pola i właściwości reprezentują informacje przechowywane w obiekcie. Pobierasz i ustawiasz ich wartości za pomocą instrukcji przypisania w taki sam sposób, jak pobierasz i ustawiasz zmienne lokalne w procedurze. Poniższy przykład pobiera Width właściwość i ustawia ForeColor właściwość Label obiektu.
Dim warningWidth As Integer = warningLabel.Width
warningLabel.ForeColor = System.Drawing.Color.Red
Należy pamiętać, że pole jest również nazywane zmienną składową.
Użyj procedur właściwości, gdy:
Musisz kontrolować, kiedy i jak jest ustawiana lub pobierana wartość.
Właściwość ma dobrze zdefiniowany zestaw wartości, które należy zweryfikować.
Ustawienie wartości powoduje pewną zauważalną zmianę stanu obiektu, taką jak
IsVisible
właściwość.Ustawienie właściwości powoduje zmiany innych zmiennych wewnętrznych lub wartości innych właściwości.
Przed ustawieniem lub pobraniem właściwości należy wykonać zestaw kroków.
Użyj pól, gdy:
Wartość jest typu samowalidującego się. Na przykład błąd lub automatyczna konwersja danych występuje, jeśli wartość inna niż
True
lubFalse
jest przypisana do zmiennejBoolean
.Każda wartość w zakresie obsługiwanym przez typ danych jest prawidłowa. Dotyczy to wielu właściwości typu
Single
lubDouble
.Właściwość jest typem
String
danych i nie ma żadnego ograniczenia rozmiaru ani wartości ciągu.Aby uzyskać więcej informacji, zobacz Procedury dotyczące nieruchomości.
Wskazówka
Zawsze utrzymuj pola, które nie są stałe, jako prywatne. Zamiast tego, użyj atrybutu, aby to upublicznić.
Metody
Metoda to akcja, którą może wykonać obiekt. Na przykład Add to metoda obiektu ComboBox, która dodaje nowy wpis do listy rozwijanej.
Na poniższym przykładzie przedstawiono zastosowanie metody Start w obiekcie Timer.
Dim safetyTimer As New System.Windows.Forms.Timer
safetyTimer.Start()
Należy pamiętać, że metoda jest po prostu procedurą uwidacznianą przez obiekt.
Aby uzyskać więcej informacji, zobacz Procedures.
Zdarzenia
Zdarzenie jest akcją rozpoznawaną przez obiekt, taką jak kliknięcie myszy lub naciśnięcie, i dla której można napisać kod, aby odpowiedzieć. Zdarzenia mogą wystąpić w wyniku akcji użytkownika lub kodu programu lub mogą być spowodowane przez system. Kod, który sygnalizuje zdarzenie, mówi się, że zgłasza zdarzenie, a kod, który na nie odpowiada, mówi się, że je obsługuje.
Możesz również opracowywać własne zdarzenia niestandardowe, które mają być wywoływane przez obiekty i obsługiwane przez inne obiekty. Aby uzyskać więcej informacji, zobacz Events.
Członkowie instancji i wspólni członkowie
Podczas tworzenia obiektu na podstawie klasy wynik jest wystąpieniem tej klasy. Elementy członkowskie, które nie są deklarowane za pomocą słowa kluczowego Udostępnione , są członkami wystąpienia, które należą ściśle do tego konkretnego wystąpienia. Członek instancji w jednym obiekcie jest niezależny od tego samego członka w innym obiekcie tej samej klasy. Na przykład zmienna składowa wystąpienia może mieć różne wartości w różnych wystąpieniach.
Składowe zadeklarowane za pomocą słowa kluczowego Shared
są udostępnionymi składowymi, które należą do klasy jako całości, a nie do żadnej konkretnej instancji. Wspólny członek istnieje tylko raz, bez względu na liczbę wystąpień klasy, które tworzysz, nawet jeśli nie tworzysz żadnych wystąpień. Udostępniona zmienna składowa ma na przykład tylko jedną wartość, która jest dostępna dla wszystkich kodów, które mogą uzyskiwać dostęp do klasy.
Uzyskiwanie dostępu do nieudostępnionych elementów członkowskich
Upewnij się, że obiekt został utworzony na podstawie klasy i przypisany do zmiennej obiektu.
Dim secondForm As New System.Windows.Forms.Form
W instrukcji, która uzyskuje dostęp do członka, umieść nazwę zmiennej obiektu, następnie operator dostępu do członka (
.
), a potem nazwę członka.secondForm.Show()
Uzyskiwanie dostępu do udostępnionych członków
Postępuj zgodnie z nazwą klasy za pomocą operatora dostępu do składowej (
.
), a następnie nazwy składowej. Zawsze należy uzyskać dostęp doShared
składowej obiektu bezpośrednio za pośrednictwem nazwy klasy.Console.WriteLine("This computer is called " & Environment.MachineName)
Jeśli obiekt został już utworzony z klasy, możesz alternatywnie uzyskać dostęp do
Shared
członka za pośrednictwem zmiennej obiektu.
Różnice między klasami i modułami
Główną różnicą między klasami i modułami jest to, że klasy mogą być tworzone jako obiekty, podczas gdy moduły standardowe nie mogą. Ponieważ istnieje tylko jedna kopia danych modułu standardowego, gdy jedna część programu zmienia zmienną publiczną w module standardowym, każda inna część programu pobiera tę samą wartość, jeśli odczytuje tę zmienną. Natomiast dane obiektów istnieją oddzielnie dla każdego utworzonego obiektu. Inną różnicą jest to, że w przeciwieństwie do modułów standardowych klasy mogą implementować interfejsy. Jeśli klasa jest oznaczona modyfikatorem MustInherit, nie można jej zainicjować bezpośrednio. Jednak nadal różni się on od modułu, ponieważ można go dziedziczyć, podczas gdy moduły nie mogą być dziedziczone.
Uwaga / Notatka
Gdy modyfikator Shared
jest stosowany do członka klasy, jest skojarzony z klasą jako całością, a nie z określonym wystąpieniem tej klasy. Dostęp do elementu członkowskiego jest uzyskiwany bezpośrednio przy użyciu nazwy klasy, tak samo jak dostęp do składowych modułu.
Klasy i moduły używają również różnych zakresów dla ich elementów. Składowe zdefiniowane w klasie są ograniczone do określonego wystąpienia klasy i istnieją tylko przez okres istnienia obiektu. Aby uzyskać dostęp do składowych klas spoza klasy, należy użyć w pełni kwalifikowanych nazw w formacie Object. Członek.
Z drugiej strony członkowie zadeklarowani w module są domyślnie publicznie dostępni i mogą uzyskiwać dostęp do dowolnego kodu, który może uzyskać dostęp do modułu. Oznacza to, że zmienne w module standardowym są skutecznie zmiennymi globalnymi, ponieważ są widoczne z dowolnego miejsca w projekcie i istnieją na całe życie programu.
Ponowne stosowanie klas i obiektów
Obiekty umożliwiają deklarowanie zmiennych i procedur raz, a następnie ponowne użycie ich w razie potrzeby. Jeśli na przykład chcesz dodać do aplikacji moduł sprawdzania pisowni, możesz zdefiniować wszystkie zmienne i funkcje obsługi w celu zapewnienia funkcji sprawdzania pisowni. Jeśli utworzysz moduł sprawdzania pisowni jako klasę, możesz użyć go ponownie w innych aplikacjach, dodając odwołanie do skompilowanego zestawu. Jeszcze lepiej, możesz zaoszczędzić sobie trochę pracy, używając klasy sprawdzania pisowni, którą ktoś inny opracował.
Platforma .NET udostępnia wiele przykładów składników, które są dostępne do użycia. W poniższym przykładzie użyto klasy TimeZone w przestrzeni nazw System. TimeZone Udostępnia członków, którzy umożliwiają pobieranie informacji o strefie czasowej bieżącego systemu komputerowego.
Public Sub ExamineTimeZone()
Dim tz As System.TimeZone = System.TimeZone.CurrentTimeZone
Dim s As String = "Current time zone is "
s &= CStr(tz.GetUtcOffset(Now).Hours) & " hours and "
s &= CStr(tz.GetUtcOffset(Now).Minutes) & " minutes "
s &= "different from UTC (coordinated universal time)"
s &= vbCrLf & "and is currently "
If tz.IsDaylightSavingTime(Now) = False Then s &= "not "
s &= "on ""summer time""."
Console.WriteLine(s)
End Sub
W poprzednim przykładzie pierwsza instrukcja Dim deklaruje zmienną obiektu typu TimeZone i przypisuje jej obiekt TimeZone zwrócony przez właściwość CurrentTimeZone.
Relacje między obiektami
Obiekty mogą być ze sobą powiązane na kilka sposobów. Główne rodzaje relacji to hierarchiczne i zawartościowe.
Relacja hierarchiczna
Gdy klasy pochodzą z bardziej podstawowych klas, mówi się, że mają relację hierarchiczną. Hierarchie klas są przydatne podczas opisywania elementów, które są podtypem bardziej ogólnej klasy.
W poniższym przykładzie załóżmy, że chcesz zdefiniować specjalny rodzaj Button , który działa jak normalny Button , ale także uwidacznia metodę, która odwraca kolory pierwszego planu i tła.
Definiowanie klasy pochodzącej z już istniejącej klasy
Użyj instrukcji Klasy , aby zdefiniować klasę, z której chcesz utworzyć potrzebny obiekt.
Public Class ReversibleButton
Upewnij się, że instrukcja
End Class
znajduje się po ostatnim wierszu kodu w Twojej klasie. Domyślnie zintegrowane środowisko programistyczne (IDE) automatycznie generujeEnd Class
po wprowadzeniu instrukcjiClass
.Po instrukcji
Class
bezpośrednio użyj instrukcji Inherits. Określ klasę, z której pochodzi nowa klasa.Inherits System.Windows.Forms.Button
Nowa klasa dziedziczy wszystkie elementy członkowskie zdefiniowane przez klasę bazową.
Dodaj kod dodatkowych składowych uwidacznianych przez klasę pochodną. Możesz na przykład dodać metodę
ReverseColors
, a klasa pochodna może wyglądać następująco:Public Class ReversibleButton Inherits System.Windows.Forms.Button Public Sub ReverseColors() Dim saveColor As System.Drawing.Color = Me.BackColor Me.BackColor = Me.ForeColor Me.ForeColor = saveColor End Sub End Class
Jeśli utworzysz obiekt z
ReversibleButton
klasy, będzie on mógł uzyskać dostęp do wszystkich składowych Button klasy, a takżeReverseColors
metody i innych nowych składowych zdefiniowanych w plikuReversibleButton
.
Klasy pochodne dziedziczą składniki z klasy, na której są oparte, co pozwala dodawać złożoność, gdy poruszasz się w hierarchii klas. Aby uzyskać więcej informacji, zobacz Podstawowe informacje o dziedziczeniu.
Kompilowanie kodu
Upewnij się, że kompilator może uzyskać dostęp do klasy, z której zamierzasz utworzyć nową klasę. Może to oznaczać pełne kwalifikowanie swojej nazwy, tak jak w poprzednim przykładzie, lub zidentyfikowanie jej przestrzeni nazw w instrukcji importów (przestrzeń nazw i typ platformy .NET). Jeśli klasa znajduje się w innym projekcie, może być konieczne dodanie odwołania do tego projektu. Aby uzyskać więcej informacji, zobacz Zarządzanie odwołaniami w projekcie.
Relacja zawierania
Innym sposobem, w jaki obiekty mogą być powiązane, jest relacja zawierania. Obiekty kontenera logicznie hermetyzują inne obiekty. Na przykład obiekt OperatingSystem logicznie zawiera obiekt Version, który zwraca przez swoją właściwość Version. Należy pamiętać, że obiekt kontenera nie zawiera fizycznie żadnego innego obiektu.
Zbiory
Jeden konkretny typ zawierania obiektów jest reprezentowany przez kolekcje. Kolekcje to grupy podobnych obiektów, które można wyliczyć. Język Visual Basic obsługuje określoną składnię w instrukcji For Each...Next, która pozwala na iterację przez elementy kolekcji. Ponadto kolekcje często pozwalają na używanie Item[] do pobierania elementów według indeksu lub poprzez skojarzenie ich z unikatowym ciągiem. Kolekcje mogą być łatwiejsze w użyciu niż tablice, ponieważ umożliwiają dodawanie lub usuwanie elementów bez używania indeksów. Ze względu na łatwość użycia kolekcje są często używane do przechowywania formularzy i kontrolek.
Tematy pokrewne
Przewodnik: definiowanie klas
Zawiera szczegółowy opis sposobu tworzenia klasy.
Przeciążone właściwości i metody
Przeciążone właściwości i metody
Podstawy dziedziczenia
Obejmuje modyfikatory dziedziczenia, zastępowanie metod i właściwości, MyClass i MyBase.
Okres istnienia obiektu: jak obiekty są tworzone i niszczone
Omówienie tworzenia i usuwania wystąpień klas.
Typy anonimowe
Opisuje sposób tworzenia i używania typów anonimowych, które umożliwiają tworzenie obiektów bez konieczności pisania definicji klasy dla typu danych.
Inicjatory obiektów: typy nazwane i anonimowe
Omówione są inicjatory obiektów, które są używane do tworzenia wystąpień typów nazwanych i anonimowych przy użyciu pojedynczego wyrażenia.
Instrukcje: wnioskowanie nazw właściwości i typów w deklaracjach typów anonimowych
Wyjaśnia, jak wywnioskować nazwy właściwości i typy w deklaracjach typów anonimowych. Zawiera przykłady pomyślnego i nieudanego wnioskowania.