Лучшее руководство по C # дженериков (Generic) в 2024 году. В этом руководстве вы можете изучить Общие (Generic) функции,Общий метод (Generic),Общий (Generic) введен в эксплуатацию,
Родовой (Generic) позволяет отсрочить получение типа данных класса или программирования метод элементов спецификации, пока не пришло время , чтобы на самом деле использовать программу.Другими словами, это позволяет вам написать универсальный класс или метод, который может работать с любым типом данных.
Вы можете написать класс спецификации или метод, с помощью подстановки типов данных параметров. Когда функция вызывается конструктор или метод компилятор встречает класс, который будет генерировать код для обработки тип данных указан. Следующий простой пример поможет вам понять эту концепцию:
с помощью системы; используя System.Collections.Generic; Пространство имен GenericApplication { Открытый класс MyGenericArray <T> { частный T [] массив; общественного MyGenericArray (размер INT) { Массив = новый T [размер + 1]; } общественного T GetItem (INT индекс) { вернуть массив [индекс]; } общественного недействительными SetItem (INT индекс, значение Т) { массив [индекс] = значение; } } класс Tester { статической силы основных (String [] агдз) { // Объявляем целочисленный массив MyGenericArray <Int> INTArray = новый MyGenericArray <Int> (5); // Установить значение для (INT C = 0; с <5; C ++) { intArray.setItem (с, с * 5); } // Получить значение (Int с = 0; с <5; C ++) { Console.Write (intArray.getItem (с) + ""); } Console.WriteLine (); // Объявляем массив символов MyGenericArray <символ> charArray = новый MyGenericArray <символ> (5); // Установить значение для (INT C = 0; с <5; C ++) { charArray.setItem (с, (символ) (с + 97)); } // Получить значение (Int с = 0; с <5; C ++) { Console.Write (charArray.getItem (с) + ""); } Console.WriteLine (); Console.ReadKey (); } } }
Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:
05101520 ABCDE
Использование дженериков представляет собой программу для повышения технического потенциала, в частности, в следующих аспектах:
В приведенном выше примере, мы использовали общий класс, мы можем объявить родовое параметры типа метода. Следующая программа иллюстрирует эту концепцию:
с помощью системы; используя System.Collections.Generic; пространство имен GenericMethodAppl { класс программы { статической силы своп <T> (T реф LHS, исх Т шк) { T температура; Темп = LHS; LHS = RHS; шк = темп; } статической силы основных (String [] агдз) { Int а, б; символ C, D; а = 10; б = 20; с = 'I'; D = 'V'; // Отображение до значения обмена Console.WriteLine ( "значения Int перед вызовом свопа:"); Console.WriteLine ( "а = {0}, B = {1}", а, б); Console.WriteLine ( "значения Char перед вызовом свопа:"); Console.WriteLine ( "C = {0}, d = {1}", в, г); // Вызов подкачки Своп <Int> (REF A, № б); Своп <символ> (ссылка с, зеркальный d); // После обмена значением отображения Console.WriteLine ( "Int значения после вызова своп:"); Console.WriteLine ( "а = {0}, B = {1}", а, б); Console.WriteLine ( "значения Char после вызова своп:"); Console.WriteLine ( "C = {0}, d = {1}", в, г); Console.ReadKey (); } } }
Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:
Int значения перед вызовом свопа: а = 10, B = 20 Символьные значения перед вызовом свопа: с = I, d = V Int значения после вызова своп: а = 20, B = 10 Символьные значения после вызова своп: с = V, d = I
Вы можете определить с помощью параметров универсального типа делегата. Например:
Делегат T NumberChanger <T> (T п);
Следующий пример демонстрирует использование комиссии:
с помощью системы; используя System.Collections.Generic; Делегат T NumberChanger <T> (T п); пространство имен GenericDelegateAppl { класс TestDelegate { статические INT Num = 10; открытые статические INT AddNum (целое р) { Num + = р; вернуть Num; } открытые статические INT MultNum (INT д) { Num * = д; вернуть Num; } открытые статические INT GetNum () { вернуть Num; } статической силы основных (String [] агдз) { // Создание экземпляра делегата NumberChanger <Int> NC1 = новый NumberChanger <Int> (AddNum); NumberChanger <Int> ПС2 = новый NumberChanger <Int> (MultNum); // Вызов метода с помощью объекта делегата NC1 (25); Console.WriteLine ( "Значение Num: {0}", GetNum ()); ПС2 (5); Console.WriteLine ( "Значение Num: {0}", GetNum ()); Console.ReadKey (); } } }
Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:
Значение Num: 35 Значение Num: 175