Typy ogólne w Visual Basic (Visual Basic)

A typu rodzajowego jest pojedynczym elementem programowania, który dostosowuje się do wykonywać te same funkcje dla różnych typów danych.Podczas definiowania klasą rodzajową lub procedury, nie musisz zdefiniować oddzielną wersję dla każdego typu danych, dla których warto wykonać tę funkcję.

Analogicznie jest śrubokręt zestaw z wymiennych głowic.Sprawdzić śruby należy włączyć i wybierz poprawną głowy do tego śruby (rusztem przekroczył, gwiazdką).Gdy wstawiasz głowy poprawny uchwyt śrubokręta, wykonana dokładnie tę samą funkcję śrubokręt, a mianowicie przełomem.

Śrubokręt ustawiony jako narzędzie ogólne

Diagram przedstawiający śrubokręt ustawiony jako narzędzie ogólne

Podczas definiowania typu rodzajowego parameterize go z jednego lub więcej typów danych.Dzięki temu przy użyciu kodu, aby dostosować typy danych do swoich wymagań.Kod można zadeklarować kilka różnych elementów programowania z elementu rodzajowy, każdy z nich na inny zestaw typów danych.Ale wszystkie elementy deklarowanych wykonać identyczne, niezależnie od tego, jakie typy danych używają.

Na przykład, możesz utworzyć i używać klasy kolejki, która działa na określony typ danych, takich jak String.Można zadeklarować klasy z Queue, jak w poniższym przykładzie.

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

Można teraz używać stringQ do pracy wyłącznie z String wartości.Bo stringQ jest specyficzne dla String a nie jest powszechny dla Object wartości, nie masz późnego wiązania lub typ konwersji.To oszczędza czas wykonania i zmniejsza błędy w czasie wykonywania.

Aby uzyskać więcej informacji dotyczących używania typ rodzajowy, zobacz Porady: używanie klasy ogólnej (Visual Basic).

Przykład klasy rodzajowe

Poniższy przykład pokazuje szkielet definicji klasy rodzajowej.

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

W poprzednim szkielet t jest parametr typu, symbol zastępczy dla typu danych, podana przy deklarowaniu klasy.Gdzie indziej w kodzie, można zadeklarować różne wersje classHolder , podając różne typy danych dla t.W poniższym przykładzie przedstawiono dwa takie deklaracje.

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

Deklarujemy poprzedniego sprawozdania skonstruowane klas, w której określony typ zastępuje parametr typu.Ta wymiana jest propagowane przez cały kod w klasie konstruowanej.W poniższym przykładzie pokazano, co processNewItem procedura wygląda jak w integerClass.

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

Na przykład bardziej kompletny, zobacz Porady: definiowanie klasy, która może zapewnić identyczną funkcjonalność różnych typów danych (Visual Basic).

Kwalifikujące się elementów programowania

Można zdefiniować i użyć klas rodzajowych, struktury, interfejsy, procedur i delegatów.Należy zauważyć, że .NET Framework definiuje kilka klas rodzajowych, struktur i interfejsy, które reprezentują często używanych elementów generic.System.Collections.Generic Obszar nazw zapewnia słowniki, list, kolejek i stosów.Przed zdefiniowaniem własne element rodzajowy, zobacz, jeśli jest już dostępny w System.Collections.Generic.

Procedury nie są typy, ale można zdefiniować i użyć procedur rodzajowy.Zobacz Procedury ogólne w Visual Basic.

Zalety typy rodzajowe

Typ rodzajowy służy jako podstawa do deklarowania kilka różnych elementów programowania, z których każdy działa na określony typ danych.Alternatywy dla typu rodzajowego są:

  1. Jednego typu na Object typ danych.

  2. Zestaw określonego typu wersje tego typu, każdej wersji pojedynczo zakodowane i działających na jeden określony typ danych, takich jak String, Integer, lub typu zdefiniowane przez użytkownika, takie jak customer.

Typ rodzajowy ma następujące zalety w stosunku do tych alternatyw:

  • Typ bezpieczeństwa. Typy rodzajowe egzekwowania, kontrola typów w czasie kompilacji.Na podstawie typów Object przyjmują dowolny typ danych i należy napisać kod, aby sprawdzić, czy typ danych wejściowych jest dopuszczalne.Z typami ogólnymi kompilator można złapać niezgodności typu przed w czasie wykonywania.

  • Wydajność. Typy rodzajowe nie trzeba pole i urodzony danych, ponieważ każdy z nich jest specjalistyczne dla jednego typu danych.Operacje oparte na Object musi pole typów danych wejściowych do konwertowania ich do Object i Rozpakowywanie danych przeznaczonych do produkcji.Boksie i pakowania należy zmniejszyć wydajność.

    Na podstawie typów Object są również późnym wiązaniem, co oznacza, że dostęp do swoich członków wymaga dodatkowego kodu w czasie wykonywania.Zmniejsza również wydajność.

  • Kod konsolidacji. Kod w polu Typ rodzajowy musi być określony tylko raz.Zestaw określonego typu wersji typu zreplikować ten sam kod w każdej wersji, z tą tylko różnicą określony typ danych dla tej wersji.Typy rodzajowe wersje określonego typu są wszystkie generowane z oryginalnego typu rodzajowego.

  • Ponowne użycie kodu. Kod, który nie zależy od typu danych mogą być ponownie wykorzystane z różnych typów danych, jeśli jest rodzajowy.Często ponownie można użyć nawet o typie danych, który nie pierwotnie przewidzieć.

  • Obsługa IDE. Korzystając z konstruowanej typ zadeklarowany z typu rodzajowego, zintegrowane środowisko programistyczne (IDE) może dać więcej wsparcia podczas tworzenia kodu.Na przykład IntelliSense pokazać opcje specyficzne dla typu argument do konstruktora lub metody.

  • Rodzajowy algorytmów. Streszczenie algorytmów, które są niezależne od typu są dobrymi kandydatami do typów ogólnych.Na przykład, ogólna procedura, która sortuje elementy za pomocą IComparable interfejs może być używany z dowolnego typu danych, który implementuje IComparable.

Ograniczenia

Chociaż kod w definicji typu rodzajowego powinien być jak typ niezależny jak to możliwe, należy wymagać możliwości dowolnego typu danych dostarczanych do typu rodzajowego.Na przykład, jeśli chcesz porównać dwie pozycje w celu sortowania lub sortowania, ich typ danych musi implementować IComparable interfejsu.Wymóg ten można wymuszać przez dodanie ograniczenie do parametru typu.

Przykład ograniczenia

W poniższym przykładzie pokazano szkielet definicji klasy z ograniczeniem, która wymaga argumentu typu do wdrożenia IComparable.

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

Jeśli kod kolejne próby konstruowania klasy z itemManager dostarczanie typu, który nie implementuje IComparable, kompilator sygnalizuje błąd.

Typy ograniczeń

Swoje ograniczenia można określić dowolną kombinację następujące wymagania:

  • Argument typu muszą implementować jeden lub więcej interfejsów

  • Argument typu musi być typu lub dziedziczą z co najwyżej jedną klasę.

  • Argument typu musi ujawniać dostępne dla kodu, który tworzy obiekty konstruktora bez parametrów

  • Argument typu musi być typu odwołania, lub musi być Typ wartości

Do nałożenia wymogu więcej niż jeden, możesz użyć oddzielone przecinkami ograniczenia listy w nawiasach klamrowych ({ }).Wymaganie dostępny konstruktor, obejmują New — Operator (Visual Basic) słowa kluczowego na liście.Typ odwołania, wymagać obejmują Class słowa kluczowego. Typ wartości, wymagać obejmują Structure słowa kluczowego.

Aby uzyskać więcej informacji na temat ograniczeń, zobacz Lista typów (Visual Basic).

Przykładem wielu ograniczeń

Poniższy przykład pokazuje szkielet definicji klasy rodzajowej z listy ograniczenie na parametr typu.Kod, który tworzy wystąpienie tej klasy, argument Typ musi implementować zarówno IComparable i IDisposable interfejsy, być typem odwołania i narazić dostępny konstruktor bez parametrów.

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

Ważne terminy

Typy rodzajowe wprowadzenie i korzystać z następujących terminów:

  • Typ rodzajowy.Definicja klasy, struktury, interfejs, procedury lub pełnomocnika, dla której podana przynajmniej jednego typu danych po uznaniu jej.

  • Parametr typu.W definicji typu rodzajowego symbol zastępczy dla typu danych podanych podczas zadeklarować typ.

  • Argument typu.Typ danych szczególnych, który zastępuje parametr typu przy deklarowaniu skonstruowane typu od typu rodzajowego.

  • Ograniczenie.Stan na parametr typu, który ogranicza typ argumentu można podać dla niego.Ograniczenie może wymagać argument Typ musi implementować interfejs określonego, być lub dziedziczą z klasy określonej, ma dostępne konstruktora bez parametrów lub typu odwołania lub typ wartości.Można połączyć te ograniczenia, ale można określić co najwyżej jedną klasę.

  • Skonstruowane typu.Klasy, struktury, interfejs, procedury lub pełnomocnika zadeklarowane od typu rodzajowego, dostarczając argumentów typu dla jego parametrów typu.

Zobacz też

Zadania

Rozwiązywanie problemów związanych z typami danych (Visual Basic)

Informacje

Typ danych — Podsumowanie (Visual Basic)

Of — Klauzula (Visual Basic)

Jako

Object — typ danych

Koncepcje

Typy danych w Visual Basic

Znaki typu

Typy wartości i odwołań

Inne zasoby

Konwersje plików w Visual Basic

Kowariancja i kontrawariancja (C# i Visual Basic)

Iteratory (C# i Visual Basic)