Najlepszy samouczek C # rodzajowych (Generic) W 2024 r. W tym samouczku możesz dowiedzieć się Generic (ogólne) funkcje,Metoda ogólna (Generic),Generic (Generic) zleciła,
Generic (Generic) pozwala opóźnić przygotowanie typu danych klasy lub metody programowania elementów specyfikacji, aż nadszedł czas, aby faktycznie korzystać z programu.Innymi słowy, pozwala na pisanie rodzajowe klasy lub metody, która może pracować z dowolnym typem danych.
Możesz napisać klasę specyfikacji lub metodę zastępując typy danych parametrów. Po wywołaniu funkcji konstruktora lub metody kompilator napotka klasę, która będzie generować kod do obsługi określonego typu danych. Poniższy prosty przykład pomoże zrozumieć tę koncepcję:
using System; stosując System.Collections.Generic; nazw GenericApplication { public class MyGenericArray <T> { private T [] tablica; MyGenericArray publicznych (int size) { tablica = new T [size + 1]; } publicznego T GetItem (int index) { powrót tablica [indeks]; } public void setItem (int index, wartość T) { tablica [indeks] = wartość; } } Klasa Tester { static void Main (string [] args) { // Zadeklaruj tablicę całkowitą MyGenericArray <int> intArray = new MyGenericArray <int> (5); // Ustaw wartość for (int c = 0; c <5; c ++) { intArray.setItem (c, c * 5); } // Pobierz wartość (int c = 0; c <5; c ++) { Console.Write (intArray.getItem (c) + ""); } Console.WriteLine (); // Zadeklaruj tablicę znaków MyGenericArray <char> charArray = new MyGenericArray <char> (5); // Ustaw wartość for (int c = 0; c <5; c ++) { charArray.setItem (c, (znaków) (C + 97)); } // Pobierz wartość (int c = 0; c <5; c ++) { Console.Write (charArray.getItem (c) + ""); } Console.WriteLine (); Console.ReadKey (); } } }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
05101520 abcde
Stosowanie leków generycznych jest programem, w celu zwiększenia możliwości technicznych, w szczególności w następujących aspektach:
W powyższym przykładzie użyliśmy klasy rodzajowe, możemy zadeklarować ogólne parametry typu metody. Następujący program ilustruje tę koncepcję:
using System; stosując System.Collections.Generic; GenericMethodAppl przestrzeni nazw { Program klasy { void swap <T> (T ref LHS, ref T prawa oś) { T temp; temp = lewa; lewa = prawa oś; prawa oś = temp; } static void Main (string [] args) { int a, b; char c, d; a = 10; B = 20; c = "ja"; D = 'V'; // Wyświetlenie przed Console.WriteLine wartości wymiennej ( "Wartości Int przed wywołaniem wymiany:"); Console.WriteLine ( "a = {0}, B = {1}", a, b); Console.WriteLine ( "Wartości Char przed wywołaniem zamianę:"); Console.WriteLine ( "C = {0}, d = {1}", c, d); // Zamiana połączeń Zamień <int> (ref a, ref b); Zamień <char> (ref c ref d); // Po wymianie Console.WriteLine ( "wyświetlacz wartości wartości Int Po wywołaniu zamianę:"); Console.WriteLine ( "a = {0}, B = {1}", a, b); Console.WriteLine ( "Wartości Char po wywołaniu zamianę:"); Console.WriteLine ( "C = {0}, d = {1}", c, d); Console.ReadKey (); } } }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
Wartości Int przed wywołaniem wymiany: a = 10 b = 20 Wartości Char przed wywołaniem wymiany: c = I, D = V Wartości Int Po wywołaniu wymiany: a = 20 b = 10 Wartości Char po wywołaniu wymiany: c = V, d = l
Można zdefiniować za pomocą parametrów typu delegata generycznych. Na przykład:
Delegat T NumberChanger <T> (T n);
Poniższy przykład demonstruje użycie komisji:
using System; stosując System.Collections.Generic; Delegat T NumberChanger <T> (T n); GenericDelegateAppl przestrzeni nazw { Klasa TestDelegate { static int num = 10; public static int AddNum (int p) { num + = p; powrót num; } public static int MultNum (int q) { num = q *; powrót num; } public static int getNum () { powrót num; } static void Main (string [] args) { // Tworzenie instancji delegata NumberChanger <int> NC1 = new NumberChanger <int> (AddNum); NumberChanger <int> NC2 = new NumberChanger <int> (MultNum); // Wywołanie metody przy użyciu NC1 obiektu delegata (25); Console.WriteLine ( "Wartość Num: {0}", getNum ()); NC2 (5); Console.WriteLine ( "Wartość Num: {0}", getNum ()); Console.ReadKey (); } } }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
Wartość Num: 35 Wartość Num: 175