Struktury a tříd (Visual Basic)
Visual Basicsjednocuje syntaxe struktury a tříd s výsledkem, že obě entity podporují většinu stejných funkcí.Existují však také důležité rozdíly mezi strukturami a tříd.
Výhodou je referenční typy jsou třídy – předání odkaz je efektivnější než předáním strukturu proměnné s jeho data.Na druhé straně struktury nevyžadují přidělení paměti na globální haldy.
Protože nemohou dědit strukturu, struktury by měla sloužit pouze pro objekty, které nemusí být prodloužena.Pomocí struktury objektu, který chcete vytvořit instanci malé velikosti a brát v úvahu charakteristiky tříd versus struktur.
Podobnost
Struktury a třídy jsou podobné v následujících ohledech:
Obě jsou kontejner typy, což znamená, že obsahují další typy jako členové.
Obě mají členy, které mohou obsahovat konstruktory, metody, vlastnosti, polí, konstanty, výčty, události a obslužné rutiny událostí.Nezaměňujte však tyto členy deklarované prvky struktury.
Členové obou lze individualizaci úrovně přístupu.Například lze prohlásit za jeden člen Public a jiné Private.
Obojí lze implementovat rozhraní.
Obojí lze sdílet konstruktory, s nebo bez parametrů.
Obojí lze vystavit výchozí vlastnost, za předpokladu, že vlastnost trvá nejméně jeden parametr.
Obě deklarovat a zvýšení událostí a deklarovat i delegátů.
Rozdíly
Struktury a tříd se liší v následující údaje:
Struktury jsou hodnoty typů; třídy jsou referenční typy.Proměnné typu struktura obsahuje data struktury, spíše než obsahující odkaz na data jako typ třídy.
Struktur pomocí zásobníku přidělení; třídy použijte přidělení haldy.
Všechny prvky konstrukce jsou Public ve výchozím nastavení. Třída proměnné a konstanty jsou Private ve výchozím nastavení jsou ostatní členové třídy Public ve výchozím nastavení.Toto chování pro členy třídy poskytuje kompatibilitu s výchozí hodnoty systému Visual Basic 6.0.
Struktura musí mít alespoň jeden sdíleném proměnné nebo sdíleném, noncustom prvek událostí; Třída může být zcela prázdné.
Prvky struktury nelze deklarovat jako Protected; mohou členové třídy.
Postup struktury lze zpracovávat události, pouze pokud je Sdílené (Visual Basic)Sub postup a pouze Příkaz AddHandler; všechny procedury třídy lze zpracovávat události, buď pomocí Klauzule Handles (Visual Basic) klíčové slovo nebo AddHandler prohlášení.Další informace naleznete v tématu Události (Visual Basic).
Struktura deklarace proměnných nelze určit Inicializátory nebo počáteční velikost pro pole; Třída deklarace proměnných lze.
Struktury implicitně dědí System.ValueType třída a nemůže dědit od typu; třídy mohou dědit z třídy nebo tříd než System.ValueType.
Konstrukce nejsou dědičné; třídy jsou.
Struktury nikdy ukončeno, takže nikdy volá společného jazykového modulu runtime (CLR) Finalize metodu na žádnou strukturu; třídy jsou ukončena kolekcí odpadků (GC), které vyvolá Finalize na třídě, jakmile zjistí, že nejsou žádné aktivní odkazy zbývající.
Konstrukce nevyžaduje konstruktor; Třída nepodporuje.
Můžete mít struktur sdíleném konstruktory pouze v případě, že přijmou parametry; třídy mohou uživatelé s nebo bez parametrů.
Každá struktura má implicitní veřejný konstruktor bez parametrů.Tento konstruktor inicializuje všechny struktury datové prvky na výchozí hodnoty.Nelze předefinovat toto chování.
Proměnné instance a
Struktury jsou typy hodnot, každá proměnná struktura trvale vázáno na strukturu jednotlivých instancí.Ale třídy jsou typy odkazů a objektové proměnné mohou odkazovat na různé instance třídy v různých časech.Tento rozdíl se týká používání struktur a třídy následujícími způsoby:
Inicializace. Struktura proměnná implicitně zahrnuje inicializaci prvky pomocí struktury konstruktor bez parametrů.Proto Dim s As struct1 je ekvivalentní Dim s As struct1 = New struct1().
Přiřazení proměnné. Při přiřadit jednu proměnnou struktury na jiný nebo předat argument postup struktury instance aktuální hodnoty proměnné prvky jsou zkopírovány na novou strukturu.Přiřadit jednu proměnnou objektu na jiný nebo předat objektové proměnné postup, je zkopírován pouze ukazatel.
Nic přiřazení. Můžete přiřadit hodnotu Nic (Visual Basic) na strukturu proměnné, ale instance pokračuje být přiřazena proměnné.Stále můžete volat jeho metody a přístup k jeho datové prvky, ačkoli jsou přiřazení inicializace proměnných prvků.
Naopak nastavena proměnná objektu Nothing, můžete oddělit od instance libovolné třídy a všech členů nelze přistupovat prostřednictvím proměnné dokud přiřadit jinou instanci.
Více instancí. Proměnná objektu může mít různé třídy instance přiřazené v různých časech a několik proměnných objektu můžete odkazovat na stejnou instanci třídy současně.Provedené změny hodnoty členů třídy vliv těchto členů při přístupu přes jiné proměnné odkazující na stejnou instanci.
Struktura prvky však jsou izolovány v rámci své vlastní instance.Změny hodnoty se neprojeví v žádné jiné strukturu proměnné i v ostatních instancí stejného Structure prohlášení.
Rovnost. Testování rovnost dvou struktur musí být provedena s testu element po elementu.Dvě proměnné objektu lze porovnat pomocí Equals metoda.Equalsoznačuje, zda dvě proměnné přejděte do stejné instance.
Viz také
Úkoly
Poradce při potížích s typy dat (Visual Basic)
Koncepty
Datové typy jazyka Visual Basic
Složené datové typy (Visual Basic)
Struktury a dalších prvků programování (Visual Basic)