Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 jazyce Visual Basic neustále pracujete s objekty. Můžete použít objekty poskytované jazykem 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 aplikaci Visual Basic. Můžete dokonce vytvořit vlastní objekty a definovat pro ně další vlastnosti a metody. Objekty fungují jako prefabrikované stavební bloky pro programy – umožňují vám jednou napsat kus kódu a znovu ho používat.
Toto téma podrobně popisuje objekty.
Objekty a třídy
Každý objekt v jazyce 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, představte si řezačky cookie a soubory cookie. Řezač 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.
Před přístupem ke svým členům je nutné vytvořit objekt, s výjimkou Shared
členů, ke kterým lze přistupovat bez objektu třídy.
Vytvoření objektu z třídy
Určete, z jaké třídy chcete vytvořit objekt, nebo definujte vlastní třídu. Například:
Public Class Customer Public Property AccountNumber As Integer End Class
Napište příkaz Dim , který vytvoří 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 Customer
Přidejte klíčové slovo New Operator pro inicializaci proměnné do nové instance třídy.
Dim nextCustomer As New Customer
Nyní můžete přistupovat ke členům třídy prostřednictvím proměnné objektu.
nextCustomer.AccountNumber = lastAccountNumber + 1
Poznámka:
Kdykoli je to možné, měli byste deklarovat proměnnou typu třídy, kterou chcete přiřadit. Tomu se říká statická vazba. Pokud v době kompilace neznáte typ třídy, můžete vyvolat pozdní vazbu deklarací proměnné, která má být datovým typem objektu. Pozdní vazba však může zpomalit výkon a omezit přístup k členům objektu runtime. Další informace naleznete v tématu Deklarace proměnné objektu.
Několik instancí
Objekty nově vytvořené z třídy jsou často identické navzájem. Jakmile však existují jako jednotlivé objekty, jejich proměnné a vlastnosti lze změnit nezávisle na ostatních instancích. Pokud například do formuláře přidáte tři zaškrtávací políčka, každý objekt zaškrtávacího CheckBox políčka je instancí třídy. Jednotlivé CheckBox objekty sdílejí společnou sadu charakteristik a schopností (vlastnosti, proměnné, procedury a události) definované třídou. Každý z nich má ale svůj vlastní název, může být samostatně povolený a zakázaný a může být umístěn do jiného umístění 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 představují jejich členy.
Přístup člena
K členu objektu se dostanete tak, že zadáte v pořadí název proměnné objektu, tečku (.
) a název člena. Následující příklad nastaví Text vlastnost objektu Label .
warningLabel.Text = "Data not saved"
Výpis členů IntelliSense
IntelliSense vypíše členy třídy, když použijete možnost Seznam členů, například když zadáte tečku (.
) jako operátor přístupu k členům. Pokud zadáte tečku za názvem proměnné deklarované jako instance této třídy, IntelliSense zobrazí seznam všech instančních členů a žádné ze sdílených členů. Pokud zadáte tečku za názvem třídy, IntelliSense zobrazí seznam všech sdílených členů, ale ne žádných členů instance. Další informace najdete v tématu Použití technologie IntelliSense.
Pole a vlastnosti
Pole a vlastnosti představují informace uložené v objektu. Jejich hodnoty načtete a nastavíte pomocí příkazů přiřazení stejným způsobem, jakým načtete a nastavíte místní proměnné v postupu. Následující příklad načte Width vlastnost a nastaví ForeColor vlastnost objektu Label .
Dim warningWidth As Integer = warningLabel.Width
warningLabel.ForeColor = System.Drawing.Color.Red
Všimněte si, že pole se označuje také jako členová proměnná.
Postupy vlastností použijte v následujících případech:
Musíte určit, kdy a jak se hodnota nastavuje nebo načítá.
Vlastnost má dobře definovanou sadu hodnot, které je potřeba ověřit.
Nastavení hodnoty způsobí určitou znatelnou změnu ve stavu objektu, například
IsVisible
vlastnost.Nastavení vlastnosti způsobí změny jiných interních proměnných nebo hodnot jiných vlastností.
Před nastavením nebo načtením vlastnosti je nutné provést sadu kroků.
Pole použijte, když:
Hodnota je samostatně ověřujícího typu. K chybě nebo automatickému převodu dat dojde například v případě, že je proměnné
True
přiřazena hodnota, která neníFalse
aniBoolean
.Jakákoli hodnota v oblasti podporované datovým typem je platná. To platí pro mnoho vlastností typu
Single
neboDouble
.Vlastnost je
String
datový typ a neexistuje žádné omezení velikosti nebo hodnoty řetězce.Další informace naleznete v tématu Procedury vlastností.
Návod
Vždy ponechejte nekonstantní pole soukromá. Pokud ho chcete nastavit jako veřejnou, použijte místo toho vlastnost.
Metody
Metoda je akce, kterou může objekt provést. Například Add je metoda objektu ComboBox, která přidá novou položku do kombinovaného boxu.
Následující příklad ukazuje Start metodu objektu Timer .
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 naleznete v tématu Procedury.
Události
Událost je akce rozpoznaná objektem, například kliknutím na myš nebo stisknutím klávesy a pro kterou můžete napsat kód, který má reagovat. Události můžou nastat v důsledku akce uživatele nebo kódu programu nebo mohou být způsobeny systémem. Kód, který signalizuje událost, vyvolává událost, a kód, který na ni reaguje, se říká, že ji zpracovává.
Můžete také vyvíjet vlastní události, které budou vyvolány vašimi objekty a zpracovány jinými objekty. Další informace naleznete v části Události .
Členové instancí a sdílení členové
Při vytváření objektu z třídy je výsledkem instance této třídy. Členy, které nejsou deklarovány pomocí sdíleného klíčového slova, jsou členy instance, které patří přísně do této konkrétní instance. Člen instance v jedné instanci je nezávislý na stejném členu v jiné instanci stejné třídy. Například proměnná člena instance může mít různé hodnoty v různých instancích.
Členy deklarované pomocí klíčového Shared
slova jsou sdílené členy, které patří do třídy jako celek, a ne do žádné konkrétní instance. Sdílený člen existuje pouze jednou, bez ohledu na počet instancí jeho třídy, kterou vytvoříte, nebo i v případě, že vytvoříte žádné instance. Například sdílená členová proměnná má pouze jednu hodnotu, která je k dispozici pro veškerý kód, který má přístup ke třídě.
Přístup k nesdílených členům
Ujistěte se, že objekt byl vytvořen ze své třídy a přiřazen k proměnné objektu.
Dim secondForm As New System.Windows.Forms.Form
V příkazu, který přistupuje k členu, za názvem proměnné objektu následuje operátor přístupu člena (
.
) a poté zadejte název člena.secondForm.Show()
Přístup ke sdíleným členům
Postupujte podle názvu třídy pomocí operátoru přístupu člena (
.
) a potom názvu člena. Vždy byste měli přistupovat kShared
č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 k členu
Shared
přistupovat prostřednictvím proměnné objektu.
Rozdíly mezi třídami a moduly
Hlavním rozdílem mezi třídami a moduly je, že třídy lze vytvářet jako instance objektů, zatímco standardní moduly nemohou být vytvořeny jako instance objektů. 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 přečte tuto proměnnou. Naproti tomu data objektu existují samostatně pro každý instanciovaný objekt. 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 dá zdědit, zatímco moduly se nedědí.
Poznámka:
Shared
Pokud je modifikátor použit na člen třídy, je přidružen k samotné třídě místo konkrétní instance třídy. K členu se přistupuje přímo pomocí názvu třídy, stejně jako k členům modulu se přistupuje.
Třídy a moduly také používají pro své členy různé rozsahy. Členy definované v rámci třídy jsou vymezeny v rámci konkrétní instance třídy a existují pouze po dobu života objektu. Pokud chcete získat přístup k členům třídy mimo třídu, musíte použít plně kvalifikované názvy ve formátu Object. Člen.
Na druhou stranu jsou členové deklarovaní v rámci modulu ve výchozím nastavení veřejně přístupní a můžou k nim přistupovat libovolný kód, který má přístup k modulu. To znamená, že proměnné ve standardním modulu jsou v podstatě globální proměnné, protože jsou viditelné odkudkoli v projektu a existují po celý život programu.
Opakované použití tříd a objektů
Objekty umožňují deklarovat proměnné a procedury jednou a pak je opakovaně používat, kdykoli je potřebujete. Pokud například chcete do aplikace přidat kontrolu pravopisu, můžete definovat všechny proměnné a podpůrné funkce pro zajištění 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 kompilované sestavení. Ještě lepší je, že si můžete ušetřit určitou práci pomocí třídy kontroly pravopisu, kterou už vytvořil někdo jiný.
.NET poskytuje mnoho příkladů komponent, které jsou k dispozici pro použití. Následující příklad používá třídu TimeZone v oboru názvů System. TimeZone poskytuje členy, kteří 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í Dim Příkaz deklaruje proměnnou typu objektu TimeZone a přiřadí k němu objekt TimeZone, který je vrácen vlastností CurrentTimeZone.
Vztahy mezi objekty
Objekty mohou být vzájemně propojeny několika způsoby. Hlavní druhy vztahů jsou hierarchické a obsahové.
Hierarchický vztah
Když jsou třídy odvozeny z nejzákladnějších tříd, říká se, že mají hierarchický vztah. Hierarchie tříd jsou užitečné při popisu položek, které jsou podtypu obecnější třídy.
V následujícím příkladu předpokládejme, že chcete definovat speciální druh Button , který funguje jako normální Button , ale také zveřejňuje metodu, která obrátí barvy popředí a pozadí.
Definování třídy odvozené z již existující třídy
Pomocí příkazu class definujte třídu, ze které chcete vytvořit požadovaný objekt.
Public Class ReversibleButton
Ujistěte se, že příkaz
End Class
následuje za posledním řádkem kódu ve vaší třídě. Integrované vývojové prostředí (IDE) ve výchozím nastavení automaticky vygenerujeEnd Class
při zadáváníClass
příkazu.Class
Postupujte podle příkazu okamžitě pomocí příkazu Inherits. Zadejte třídu, ze které je nová třída odvozena.Inherits System.Windows.Forms.Button
Vaše nová 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
ReverseColors
a odvozená třída můž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 Class
Pokud vytvoříte objekt z
ReversibleButton
třídy, bude mít přístup ke všem členům Button třídy, stejně jakoReverseColors
k metodě a všem dalším novým členům, které definujete vReversibleButton
.
Odvozené třídy dědí členy z třídy, na které jsou založeny, což umožňuje přidat složitost při postupu v hierarchii tříd. Další informace naleznete v tématu Základy 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ě kvalifikovat jeho název, například v předchozím příkladu, nebo identifikaci jeho oboru názvů pomocí 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 naleznete v tématu Správa odkazů v projektu.
Vztah ohraničení
Dalším způsobem, jak můžou objekty souviset, je vztah zahrnutí. Kontejnerové objekty logicky zapouzdřují další objekty. Například OperatingSystem objekt logicky obsahuje Version objekt, který vrací prostřednictvím své Version vlastnosti. Všimněte si, že objekt kontejneru fyzicky neobsahuje žádný jiný objekt.
Sbírky
Jeden konkrétní typ zahrnutí objektu je reprezentován kolekcemi. Kolekce jsou skupiny podobných objektů, které lze vytvořit výčet. Jazyk Visual Basic podporuje konkrétní syntaxi v příkazu For Each...Next, který umožňuje iteraci položek kolekce. Kolekce navíc často umožňují použít Item[] k načtení prvků pomocí jejich indexu nebo jejich přidružením k jedinečnému řetězci. Kolekce je možné snadněji používat než pole, protože umožňují přidávat nebo odebírat položky bez použití indexů. Z důvodu jejich snadného 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 postupu vytvoření třídy.
Přetížené vlastnosti a metody
Přetížené vlastnosti a metody
Základy dědičnosti
Zahrnuje modifikátory dědičnosti, překrytí metod a vlastností, MyClass a MyBase.
Životnost objektu: Způsob vytváření a zničení objektů
Popisuje vytváření a odstraňování instancí třídy.
Anonymní typy
Popisuje, jak vytvořit a používat anonymní typy, které umožňují vytvářet objekty bez zápisu definice třídy pro datový typ.
Inicializátory objektů: Pojmenované a anonymní typy
Popisuje inicializátory objektů, které se používají k vytvoření instancí pojmenovaných a anonymních typů pomocí jednoho výrazu.
Postupy: Odvození 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ých a neúspěšných odvozování.