Latest web development tutorials

C # дженериков (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

Общие (Generic) функции

Использование дженериков представляет собой программу для повышения технического потенциала, в частности, в следующих аспектах:

  • Это поможет вам максимизировать повторное использование кода, тип защиты безопасности и повышения эффективности.
  • Вы можете создать общие классы коллекций. Библиотека классов .NET Framework содержит несколько новых классов общего сбора в пространстве именSystem.Collections.Generic.Вы можете использовать эти общие классы коллекций вместоSystem.Collectionsклассов коллекций.
  • Вы можете создавать свои собственные общие интерфейсы, общие классы, обобщенный метод общие события и общий делегат.
  • Вы можете ограничить общий класс для доступа к определенным типов данных.
  • О родовом типы данных, используемые в типе информации, может быть получена во время выполнения с помощью отражения.

Общий метод (Generic)

В приведенном выше примере, мы использовали общий класс, мы можем объявить родовое параметры типа метода. Следующая программа иллюстрирует эту концепцию:

с помощью системы;
используя 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

Общий (Generic) введен в эксплуатацию

Вы можете определить с помощью параметров универсального типа делегата. Например:

Делегат 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