Latest web development tutorials

C # Generics (Genéricos)

Genérico (Generic) permite atrasar a preparação do tipo de dados dos elementos de classe ou de programação método da especificação, até a hora de realmente usar o programa.Em outras palavras, ele permite que você escrever uma classe genérica ou método que pode trabalhar com qualquer tipo de dados.

Você pode escrever a classe especificação ou método, substituindo os tipos de dados do parâmetro. Quando a função é chamada de um construtor ou método compilador encontra uma classe que irá gerar o código para lidar com o tipo de dados especificado. O seguinte exemplo simples irá ajudá-lo a compreender este conceito:

using System;
utilizando System.Collections.Generic;

GenericApplication namespace
{
    classe pública MyGenericArray <T>
    {
        T [] array privado;
        MyGenericArray público (int size)
        {
            array = new T [size + 1];
        }
        pública T getItem (int index)
        {
            retornar array [índice];
        }
        setItem public void (int índice, o valor T)
        {
            array [index] = value;
        }
    }
           
    Tester classe
    {
        static void Main (string [] args)
        {
            // Declara uma matriz de inteiros MyGenericArray <int> intArray = new MyGenericArray <int> (5);
            // Defina o valor para (int c = 0; c <5; c ++)
            {
                intArray.setItem (C, C * 5);
            }
            // Obter valor para (int c = 0; c <5; c ++)
            {
                Console.Write (intArray.getItem (c) + "");
            }
            Console.WriteLine ();
            // Declara uma matriz de caracteres MyGenericArray <char> charArray = new MyGenericArray <char> (5);
            // Defina o valor para (int c = 0; c <5; c ++)
            {
                charArray.setItem (c, (char) (c + 97));
            }
            // Obter valor para (int c = 0; c <5; c ++)
            {
                Console.Write (charArray.getItem (c) + "");
            }
            Console.WriteLine ();
            Console.ReadKey ();
        }
    }
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

05101520
abcde

Genéricos (genérico) recursos

Uso de genéricos é um programa para melhorar as capacidades técnicas, especificamente nos seguintes aspectos:

  • Ele ajuda a maximizar a reutilização de código, o tipo de protecção da segurança e melhorando o desempenho.
  • Você pode criar uma classe de coleção genérica. biblioteca de classes .NET Framework contém várias novas classes de coleção genérica no namespaceSystem.Collections.Generic.Você pode usar essas classes de coleção genérica em vez classes de coleçãoSystem.Collections.
  • Você pode criar suas próprias interfaces genéricas, aulas de genéricos, o método genérico eventos genéricos e delegado genérico.
  • Você pode restringir a classe genérica para acessar tipos de dados específicos.
  • Sobre tipos de dados genéricos utilizados no tipo de informação pode ser obtida em tempo de execução usando reflexão.

método genérico (genérico)

No exemplo acima, temos utilizado a classe genérica, podemos declarar um genérico parâmetros de tipo de método. O programa a seguir ilustra esse conceito:

using System;
utilizando System.Collections.Generic;

GenericMethodAppl namespace
{
    Programa de classe
    {
        Trocar static void <T> (LHS ref T, rhs ref T)
        {
            temperatura T;
            temp = lhs;
            lhs = rhs;
            rhs = temperatura;
        }
        static void Main (string [] args)
        {
            int a, b;
            char c, d;
            a = 10;
            b = 20;
            c = 'I';
            d = 'V';

            // TV antes de o valor de troca Console.WriteLine ( "valores Int antes de chamar swap:");
            Console.WriteLine ( "a = {0}, b = {1}", a, b);
            Console.WriteLine ( "valores Char antes de chamar swap:");
            Console.WriteLine ( "C = {0}, d = {1}", c, d);

            // Troca de chamadas
            Trocar <int> (ref a, ref b);
            Trocar <char> (ref c, d ref);

            // Após uma troca de Console.WriteLine valor de visualização ( "valores Int depois de chamar swap:");
            Console.WriteLine ( "a = {0}, b = {1}", a, b);
            Console.WriteLine ( "valores Char depois de chamar swap:");
            Console.WriteLine ( "C = {0}, d = {1}", c, d);
            Console.ReadKey ();
        }
    }
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

valores int antes de swap chamando:
a = 10, b = 20
valores Char antes de swap chamando:
c = I, d = V
valores int depois de chamar de swap:
a = 20, b = 10
valores Char depois de chamar de swap:
C = V, d = I

Genérico (Generic) encomendado

Você pode definir através de parâmetros de tipo delegado genérico. Por exemplo:

delegado T NumberChanger <T> (T n);

O exemplo a seguir demonstra o uso da comissão:

using System;
utilizando System.Collections.Generic;

delegado T NumberChanger <T> (T n);
GenericDelegateAppl namespace
{
    classe TestDelegate
    {
        int num estática = 10;
        public static int AddNum (int p)
        {
            Num + = p;
            retornar num;
        }

        public static int MultNum (int q)
        {
            Num * = q;
            retornar num;
        }
        int public static getNum ()
        {
            retornar num;
        }

        static void Main (string [] args)
        {
            // Criar uma instância de delegado NumberChanger <int> nc1 = new NumberChanger <int> (AddNum);
            NumberChanger <int> NC2 = new NumberChanger <int> (MultNum);
            // Chamar o método utilizando um nc1 delegado objeto (25);
            Console.WriteLine ( "Valor de Num: {0}", getNum ());
            NC2 (5);
            Console.WriteLine ( "Valor de Num: {0}", getNum ());
            Console.ReadKey ();
        }
    }
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

Valor das Num: 35
Valor das Num: 175