Objekty a třídy v Visual Basic
Objekt je kombinace kódu a dat, která lze považovat za jednotku. Objekt může být součástí aplikace, například ovládací prvek nebo formulář. Celá aplikace může být také objektem.
Při vytváření aplikace v Visual Basic neustále pracujete s objekty. Můžete použít objekty poskytované objekty Visual Basic, jako jsou ovládací prvky, formuláře a objekty přístupu k datům. Můžete také použít objekty z jiných aplikací v rámci Visual Basic aplikace. Můžete dokonce vytvořit vlastní objekty a definovat pro ně další vlastnosti a metody. Objekty se pro programy chová jako předem hotové stavební bloky – umožňují vám jednou napsat část kódu a opakovaně ji používat.
Toto téma podrobně popisuje objekty.
Objekty a třídy
Každý objekt v Visual Basic je definován třídou. Třída popisuje proměnné, vlastnosti, procedury a události objektu. Objekty jsou instance tříd. Jakmile definujete třídu, můžete vytvořit tolik objektů, kolik potřebujete.
Abyste pochopili vztah mezi objektem a jeho třídou, pomyslete na soubory cookie a soubory cookie. Soubor cookie je třída . Definuje charakteristiky jednotlivých souborů cookie, například velikost a tvar. Třída se používá k vytváření objektů. Objekty jsou soubory cookie.
Objekt je nutné vytvořit před přístupem k jeho členům, s výjimkou členů, ke kterým lze přistupovat bez Shared objektu třídy.
Vytvoření objektu z třídy
Určete, ze které třídy chcete vytvořit objekt, nebo definujte vlastní třídu. Například:
Public Class Customer Public Property AccountNumber As Integer End ClassZápisem příkazu Dim vytvořte proměnnou, ke které můžete přiřadit instanci třídy. Proměnná by měla být typu požadované třídy.
Dim nextCustomer As CustomerPřidejte klíčové slovo New Operator pro inicializaci proměnné do nové instance třídy.
Dim nextCustomer As New CustomerNyní můžete přistupovat ke členům třídy prostřednictvím objektové proměnné.
nextCustomer.AccountNumber = lastAccountNumber + 1
Poznámka
Kdykoli je to možné, měli byste deklarovat proměnnou jako typu třídy, kterou chcete přiřadit. Tomu se říká časná vazba. Pokud v době kompilace typ třídy nevíte, můžete vyvolat pozdní vazbu deklarováním proměnné jako datovéhotypu objektu . Pozdní vazba ale může zvýšit výkon a omezit přístup ke členům objektu za běhu. Další informace najdete v tématu Deklarace objektové proměnné.
Několik instancí
Objekty nově vytvořené ze třídy jsou často identické k sobě navzájem. Jakmile však existují jako jednotlivé objekty, mohou být jejich proměnné a vlastnosti změněny nezávisle na ostatních instancích. Pokud například do formuláře přidáte tři zaškrtávací políčka, bude každý objekt zaškrtávacího políčka instancí CheckBox třídy . Jednotlivé objekty sdílejí společnou sadu vlastností a schopností (vlastnosti, proměnné, procedury a události) definované CheckBox třídou . Každý má ale svůj vlastní název, může být samostatně povolen a zakázán a může být umístěn na jiném místě ve formuláři.
Členy objektu
Objekt je prvek aplikace představující instanci třídy. Pole, vlastnosti, metody a události jsou stavebními bloky objektů a tvoří jejich členy.
Přístup ke členu
Ke členu objektu se přistupuje zadáním (v pořadí) názvu objektové proměnné, tečky ( ) a . názvu členu. Následující příklad nastaví Text vlastnost Label objektu .
warningLabel.Text = "Data not saved"
Seznam členů technologie IntelliSense
IntelliSense vypíše členy třídy při vyvolání její možnosti Seznam členů, například když jako operátor přístupu ke členu napíšete tečku ( . ). Pokud za název proměnné deklarované jako instanci této třídy zapíšete tečku, IntelliSense vypíše všechny členy instance a žádné sdílené členy. Pokud za samotný název třídy zapíšete tečku, IntelliSense vypíše všechny sdílené členy a žádné členy instance. Další informace najdete v tématu Používání technologie IntelliSense.
Pole a vlastnosti
Pole a vlastnosti představují informace uložené v objektu . Načítáte a nastavují jejich hodnoty pomocí příkazů přiřazení stejným způsobem, jakým načítáte a nastavují místní proměnné v proceduře. Následující příklad načte Width vlastnost a nastaví ForeColor vlastnost Label objektu.
Dim warningWidth As Integer = warningLabel.Width
warningLabel.ForeColor = System.Drawing.Color.Red
Všimněte si, že pole se také nazývá členské proměnné.
Postupy vlastností použijte v těchto případě:
Musíte řídit, kdy a jak se hodnota nastaví nebo načte.
Vlastnost má dobře definovanou sadu hodnot, které je potřeba ověřit.
Nastavení hodnoty způsobí určité znatelné změny ve stavu objektu, například
IsVisiblevlastnost .Nastavení vlastnosti způsobí změny v jiných interních proměnných nebo na hodnoty jiných vlastností.
Před nastavením nebo načtením vlastnosti je nutné provést sadu kroků.
Pole použijte v těchto případě:
Hodnota je typu s vlastním ověřením. K chybě nebo automatickému převodu dat může dojít například v případě, že je proměnné přiřazena jiná hodnota než
TrueFalseneboBoolean.Jakákoli hodnota v rozsahu podporovaném datovým typem je platná. To platí pro mnoho vlastností typu
SingleneboDouble.Vlastnost je datový typ a neexistuje žádné omezení velikosti
Stringnebo hodnoty řetězce.Další informace najdete v tématu Procedury vlastností.
Tip
Ne constantová pole vždy udržujte soukromá. Pokud chcete, aby byla veřejná, použijte místo toho vlastnost .
Metody
Metoda je akce, kterou může objekt provést. Je například Add metoda objektu , která přidá novou položku do pole se ComboBox seznamem.
Následující příklad ukazuje Start metodu Timer objektu .
Dim safetyTimer As New System.Windows.Forms.Timer
safetyTimer.Start()
Všimněte si, že metoda je jednoduše procedura, která je vystavena objektem.
Další informace najdete v tématu Postupy.
Události
Událost je akce rozpoznávaná objektem, například kliknutí myší nebo stisknutím klávesy a pro kterou můžete napsat kód pro reakci. K událostem může dojít v důsledku akce uživatele nebo kódu programu nebo může být způsobena systémem. O kódu, který signalizuje událost, se říká, že událost vyvolává, a kód, který na událost reaguje, se říká, že ji má zpracovat.
Můžete také vyvíjet vlastní události, které budou vyvolány objekty a zpracovány jinými objekty. Další informace najdete v tématu Události.
Členové instance a sdílené členy
Když vytvoříte objekt z třídy, výsledkem je instance této třídy. Členy, které nejsou deklarovány s klíčovým slovem Shared, jsou členy instance, které patří výhradně do této konkrétní instance. Člen instance v jedné instanci je nezávislý na stejném členu v jiné instanci stejné třídy. Členské proměnné instance mohou mít například různé hodnoty v různých instancích.
Členy deklarované pomocí klíčového slova jsou sdílené členy , které patří do třídy jako celek, a ne Shared do žádné konkrétní instance. Sdílený člen existuje pouze jednou bez ohledu na to, kolik instancí své třídy vytvoříte, nebo i když žádné instance vytvoříte. Sdílená členná proměnná má například pouze jednu hodnotu, která je k dispozici pro veškerý kód, který má přístup ke třídě .
Přístup k nes sdíleným členům
Ujistěte se, že objekt byl vytvořen ze své třídy a přiřazen k objektové proměnné.
Dim secondForm As New System.Windows.Forms.FormV příkazu, který přistupuje ke členu, použijte název proměnné objektu s operátorem přístupu členů ( ) a
.potom názvem členu.secondForm.Show()
Přístup ke sdíleným členům
Použijte název třídy s operátorem přístupu ke členu ( ) a
.potom názvem členu. Vždy byste měliSharedpřistupovat ke členu objektu přímo prostřednictvím názvu třídy.Console.WriteLine("This computer is called " & Environment.MachineName)Pokud jste již vytvořili objekt z třídy , můžete alternativně přistupovat ke členu prostřednictvím
Sharedproměnné objektu.
Rozdíly mezi třídami a moduly
Hlavní rozdíl mezi třídami a moduly spočívá v tom, že třídy lze vytvořit jako objekty, zatímco standardní moduly ne. Vzhledem k tomu, že existuje pouze jedna kopie dat standardního modulu, když jedna část programu změní veřejnou proměnnou ve standardním modulu, získá jakákoli jiná část programu stejnou hodnotu, pokud pak tuto proměnnou přečte. Naproti tomu data objektu existují samostatně pro každý objekt s vytvořenou instancí. Dalším rozdílem je, že na rozdíl od standardních modulů mohou třídy implementovat rozhraní. Pokud je třída označena modifikátorem MustInherit, nelze ji vytvořit přímo. Stále se ale liší od modulu, protože se může dědit, zatímco moduly se nezdědí.
Poznámka
Pokud je modifikátor použit na člen třídy, je přidružen k samotné třídě namísto Shared konkrétní instance třídy. Ke členu se přistupuje přímo pomocí názvu třídy stejným způsobem, jakým se přistupuje ke členům modulu.
Třídy a moduly také používají pro své členy různé obory. Členy definované v rámci třídy jsou vymezeny v rámci konkrétní instance třídy a existují pouze po dobu životnosti objektu. Pro přístup ke členům třídy mimo třídu je nutné použít plně kvalifikované názvy ve formátu objektu. Člen.
Na druhé straně jsou členy deklarované v rámci modulu ve výchozím nastavení veřejně přístupné a jsou přístupné z libovolného kódu, který má přístup k modulu. To znamená, že proměnné ve standardním modulu jsou efektivně globální proměnné, protože jsou viditelné odkudkoli v projektu a existují po dobu životnosti programu.
Opětovné použití tříd a objektů
Objekty umožňují deklarovat proměnné a procedury jednou a pak je opakovaně používat, kdykoli je to potřeba. Pokud například chcete do aplikace přidat kontrolu pravopisu, můžete definovat všechny proměnné a podpůrné funkce, které zajistí funkce kontroly pravopisu. Pokud vytváříte kontrolu pravopisu jako třídu, můžete ji znovu použít v jiných aplikacích přidáním odkazu na zkompilované sestavení. Ještě lepší je, že si můžete ušetřit práci pomocí třídy kontroly pravopisu, kterou už vytvořil někdo jiný.
.NET poskytuje řadu příkladů komponent, které jsou k dispozici pro použití. Následující příklad používá třídu TimeZone v oboru System názvů . TimeZone poskytuje členy, které umožňují načíst informace o časovém pásmu aktuálního počítačového systému.
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
V předchozím příkladu první příkaz Dim deklaruje objektové proměnné typu a přiřadí mu objekt TimeZone TimeZone vrácený CurrentTimeZone vlastností .
Relace mezi objekty
Objekty mohou být vzájemně vzájemně spojené několika způsoby. Hlavní druhy vztahů jsou hierarchické a kontejnerové.
Hierarchický vztah
Pokud jsou třídy odvozeny z více základních tříd, jsou říká se, že mají hierarchický vztah. Hierarchie tříd jsou užitečné při popisu položek, které jsou podtypem obecnější třídy.
V následujícím příkladu předpokládejme, že chcete definovat speciální druh, který funguje jako normální, ale zároveň zpřístupňuje metodu, která obrátí barvu popředí Button Button a pozadí.
Definujte třídu odvozenou z již existující třídy.
Pomocí příkazu třídy můžete definovat třídu, ze které chcete vytvořit objekt, který potřebujete.
Public Class ReversibleButtonUjistěte
End Classse, že příkaz následuje poslední řádek kódu ve vaší třídě. Integrované vývojové prostředí (IDE) ve výchozím nastavení při zadání příkazu automatickyEnd ClassvygenerujeClass.Okamžitě za
Classpříkazem použijte příkaz Inherits. Zadejte třídu, ze které je nová třída odvozena.Inherits System.Windows.Forms.ButtonNová třída dědí všechny členy definované základní třídou.
Přidejte kód pro další členy, které vaše odvozená třída zveřejňuje. Můžete například přidat metodu a odvozená třída
ReverseColorsmůže vypadat takto: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 ClassPokud vytvoříte objekt z třídy , bude mít přístup ke všem členům třídy, stejně jako k metodě a všem dalším novým členům, které
ReversibleButtonButtonReverseColorsdefinujete vReversibleButton.
Odvozené třídy dědí členy z třídy, na které jsou založeny, což vám umožní přidat složitost při postupu v hierarchii tříd. Další informace najdete v tématu Základní informace o dědičnosti.
Kompilace kódu
Ujistěte se, že kompilátor má přístup ke třídě, ze které chcete odvodit novou třídu. To může znamenat úplné kvalifikování jeho názvu jako v předchozím příkladu nebo identifikaci oboru názvů v příkazu Imports (obor názvů a typ .NET). Pokud je třída v jiném projektu, možná budete muset přidat odkaz na tento projekt. Další informace najdete v tématu Správa odkazů v projektu.
Vztah členství ve skupině
Dalším způsobem, jak mohou být objekty spojené, je vztah obsahující obsah. Objekty kontejneru logicky zapouzdřují jiné objekty. Například objekt OperatingSystem logicky obsahuje Version objekt, který vrací prostřednictvím své vlastnosti Version . Všimněte si, že objekt kontejneru fyzicky neobsahuje žádný jiný objekt.
Kolekce
Jeden konkrétní typ obsahu objektu je reprezentován kolekcemi. Kolekce jsou skupiny podobných objektů, které lze vytvořit výčet. Visual Basic podporuje konkrétní syntaxi v části For Each... Další příkaz, který umožňuje iterovat položkami kolekce. Kolekce navíc často umožňují použít k načtení elementů podle jejich indexu nebo jejich přidružení Item[] k jedinečnému řetězci. Kolekce mohou být jednodušší než pole, protože umožňují přidávat nebo odebírat položky bez použití indexů. Vzhledem k jejich snadnému použití se kolekce často používají k ukládání formulářů a ovládacích prvků.
Související témata
Návod: Definování tříd
Obsahuje podrobný popis vytvoření třídy.
Přetížené vlastnosti a metody
Vlastnosti a metody přetečení
Základy dědičnosti
Popisuje modifikátory dědičnosti, přepisování metod a vlastností, MyClass a MyBase.
Doba života objektu: Jak se objekty vytvářejí a zničí
Popisuje vytváření a likvidaci instancí třídy.
Anonymní typy
Popisuje, jak vytvořit a používat anonymní typy, které umožňují vytvářet objekty bez psaní definice třídy pro datový typ.
Inicializátory objektů: Pojmenované a anonymní typy
Popisuje inicializátory objektů, které se používají k vytváření instancí pojmenovaných a anonymních typů pomocí jednoho výrazu.
Postupy: Odvodení názvů a typů vlastností v deklaracích anonymního typu
Vysvětluje, jak odvodit názvy a typy vlastností v deklaracích anonymního typu. Poskytuje příklady úspěšného a neúspěšného odvozování.