Sdílet prostřednictvím


Obecné typy v jazyce Visual Basic (Visual Basic)

A Obecný typ je jediný programovací element, který přizpůsobí provádět stejné funkce pro různé datové typy.Při definování obecné třídy nebo postup není nutné definovat samostatné verze pro každý typ dat, pro které chcete provést tuto funkci.

Analogicky je šroubovák s vyměnitelné hlavy.Kontrolovat šroub je třeba vypnout a vybrat správný hlavy pro tento šroub (s drážkou, překřížené, starred).Jakmile vložíte správný hlavy úchyt šroubovák, provedení přesně stejnou funkci s šroubovák, totiž zapnutí šroubek.

Šroubováku jako obecného nástroje

Diagram šroubováku jako obecného nástroje

Při definování obecného typu parametrizovat s jedním nebo více datových typů.To umožňuje použití kódu k přizpůsobení datových typů jeho požadavkům.Kód můžete deklarovat několik různých programovací prvky z obecného prvku postupně na jinou sadu datových typů.Ale všechny elementy deklarované provádět stejné logiky, bez ohledu na to, jaké typy dat používají.

Chcete-li například vytvořit a použít třídu fronty, která pracuje jako určitý datový typ String.Deklarujete třídu z Queue, jak ukazuje následující příklad.

Public stringQ As New System.Collections.Generic.Queue(Of String)

Nyní můžete použít stringQ pracovat pouze s String hodnoty.Protože stringQ je specifický pro String místo právě pro všeobecné Object hodnoty, nemají pozdní vazby nebo typ převodu.To šetří čas spuštění a snižuje chyby.

Další informace o použití obecného typu viz Postupy: Použití obecné třídy (Visual Basic).

Například obecné třídy.

Následující příklad ukazuje definici kostry obecné třídy.

Public Class classHolder(Of t)
    Public Sub processNewItem(ByVal newItem As t)
        Dim tempItem As t
        ' Insert code that processes an item of data type t. 
    End Sub 
End Class

V předchozím kostru t je Typ parametru, který je zástupný symbol pro datový typ, který zadáte při deklaraci třídy.Jinde v kódu, můžete deklarovat různé verze classHolder zadáním různých datových typů pro t.Následující příklad ukazuje dvě prohlášení.

Public integerClass As New classHolder(Of Integer)
Friend stringClass As New classHolder(Of String)

Deklarovat předchozích výpisů vyrobeno třídy, ve kterém konkrétní typ nahrazuje parametr typu.Toto nahrazení je šíření v kódu v rámci třídy vyrobeno.Následující příklad ukazuje, co processNewItem postup vypadá podobně jako v integerClass.

Public Sub processNewItem(ByVal newItem As Integer)
    Dim tempItem As Integer 
    ' Inserted code now processes an Integer item. 
End Sub

Kompletní příklad naleznete v Postupy: Definice třídy, která poskytne identické funkce pro různé datové typy (Visual Basic)..

Způsobilé prvky programování

Můžete definovat a používat obecné třídy, struktury, rozhraní, postupy a delegáty.Všimněte si, že .NET Framework definuje několik obecné třídy, struktury a rozhraní, které představují běžně používané obecné prvky.System.Collections.Generic Obor názvů poskytuje slovníky, seznamy, fronty a zásobníky.Před definováním vlastní obecný element, viz, pokud je již k dispozici v System.Collections.Generic.

Postupy nejsou typy, ale můžete definovat a používat obecné postupy.Viz téma Obecné procedury v jazyce Visual Basic.

Výhody obecných typů

Obecný typ slouží jako základ pro deklarování několik různých programovací prvky, které působí na určitého datového typu.Alternativy k obecného typu jsou:

  1. Na jeden typ Object typu.

  2. Sada specifické verze typu každá verze jednotlivě kódovány a pracující na jeden určitý datový typ, jako String, Integer, nebo uživatelem definovaný typ jako customer.

Obecný typ má následující výhody těchto alternativ:

  • Bezpečnost typů. Obecné typy vynutit kontrola typu v době kompilace.Na základě typů Object přijmout jakýkoli typ dat a musíte napsat kód, zda vstupní datový typ je přijatelná.Generické typy kompilátor může zachytit neshody typu před běhu.

  • Výkon. Obecné typy není nutné pole a unbox dat, protože každý z nich je specializované pro jednoho datového typu.Operace založené na Object musí pole vstupní datové typy převést na Object a unbox určených pro výstupní data.Zabalení a rozbalení snížit výkon.

    Na základě typů Object jsou také pozdní vazbou, což znamená, že přístup k jejich členů vyžaduje dodatečný kód za běhu.To také snižuje výkon.

  • Kód konsolidace. Kód v obecného typu je definován pouze jednou.Sada specifické verze typu musí replikovat stejný kód v každé verzi s jediným rozdílem je určitý datový typ pro tuto verzi.Generické typy jsou všechny specifické verze generované z původního obecného typu.

  • Opětovné použití kódu. Kód, který není závislý na konkrétní datový typ lze znovu s různými typy dat, pokud je obecný.Často ji můžete použít i s typem dat, který jste nelze předpovědět původně.

  • Podpora rozhraní IDE. Při použití konstruovaný typ z obecného typu deklarován integrované vývojové prostředí (IDE) vám může poskytnout další podporu při vývoji vašeho kódu.Technologie IntelliSense můžete například zobrazit možnosti specifické pro argument konstruktoru nebo metody.

  • Obecné algoritmy. Abstraktní algoritmy, které jsou nezávislé na typu jsou vhodnými kandidáty pro obecné typy.Například obecný postup, který seřadí položky pomocí IComparable rozhraní lze použít datový typ, který implementuje IComparable.

Omezení

Ačkoli kód v definici obecného typu musí být typu jako nezávislé co, bude možná nutné vyžadovat schopnost libovolný typ dat, poskytnutých obecného typu.Například pokud chcete porovnat dvě položky pro řazení nebo řazení, jejich datový typ musí implementovat IComparable rozhraní.Tento požadavek lze vynutit přidáním omezení typ parametru.

Příklad omezení

Následující příklad ukazuje definici kostry třídy s omezením, která vyžaduje argument typ implementovat IComparable.

Public Class itemManager(Of t As IComparable)
    ' Insert code that defines class members. 
End Class

Pokud se pokusí následující kód třídy z itemManager dodávající typ, který neimplementuje IComparable, kompilátor signalizuje chybu.

Typy omezení

Vaše omezení můžete určit libovolné kombinace následující požadavky:

  • Argument typ musí implementovat rozhraní jednoho nebo více

  • Argument typu musí být typu nebo zdědit nejvýše jednu třídu.

  • Argument typu musí vystavit konstruktor přístupný kód, který vytvoří objekty z ní

  • Argument typu musí být referenční typ, nebo musí být Typ hodnoty

Pokud potřebujete ukládat více než jeden požadavek pomocí oddělených čárkou seznamu omezení uvnitř závorek ({ }).Vyžadují přístupné konstruktoru, patří New – operátor (Visual Basic) klíčové slovo v seznamu.Aby typ odkazu zahrnout Class klíčové slovo; Typ hodnoty vyžadují, patří Structure klíčové slovo.

Další informace o omezení viz Seznam typů (Visual Basic).

Příklad více omezení.

Následující příklad ukazuje kostru definici obecné třídy s seznamu omezení na parametru typu.Kód vytvoří instanci této třídy musí implementovat typ argumentu i IComparable a IDisposable rozhraní je odkazový typ a vystavit přístupné bezparametrový konstruktor.

Public Class thisClass(Of t As {IComparable, IDisposable, Class, New})
    ' Insert code that defines class members. 
End Class

Důležité termíny

Obecné typy zavést a používat následující podmínky:

  • Obecný typ.Definice třídy, struktury, rozhraní, postup nebo pro které je zadat alespoň jeden datový typ při jeho deklaraci delegáta.

  • Parametr typu.V definici obecného typu zástupný symbol pro typ dat je zadat při deklaraci typu.

  • Argument typu.Určitý datový typ, který nahrazuje parametr typu, když deklarujete konstruovaný typ z obecného typu.

  • Omezení.Podmínka pro parametr typu, který omezuje typ argumentu lze zadat pro něj.Omezení může vyžadovat, že argument typ musí implementovat konkrétní rozhraní, být dědí ze třídy, zejména, mít přístupné bezparametrový konstruktor nebo být referenční typ nebo hodnotu.Tato omezení lze kombinovat, ale můžete zadat maximálně jednu třídu.

  • Konstruovaný typ.Třídy, struktury, rozhraní, postup nebo delegáta deklarovat poskytnutím argumenty typu pro typ parametry z obecného typu.

Viz také

Úkoly

Řešení potíží s datovými typy (Visual Basic)

Referenční dokumentace

Souhrn datových typů (Visual Basic)

Of – klauzule (Visual Basic)

Jako

Datový typ objektu

Koncepty

Datové typy v jazyce Visual Basic

Znaky typu (Visual Basic)

Typy hodnot a typy odkazu

Další zdroje

Převody typů v jazyce Visual Basic

Kovariance a kontravariance (C# and Visual Basic)

Iterátory (C# and Visual Basic)