Latest web development tutorials

C # genéricos (Generic)

Genérico (Generic) le permite retrasar la preparación del tipo de datos de los elementos de la clase de programación o método de la especificación, hasta que sea hora de utilizar realmente el programa.En otras palabras, se le permite escribir una clase genérica o método que puede trabajar con cualquier tipo de datos.

Puede escribir la especificación de la clase o método mediante la sustitución de los tipos de datos de parámetros. Cuando la función se llama a un constructor o método compilador encuentra una clase que va a generar código para manejar el tipo de datos especificado. El siguiente ejemplo le ayudará a entender este concepto:

using System;
utilizando System.Collections.Generic;

GenericApplication espacio de nombres
{
    MyGenericArray public class <T>
    {
        T [] array privada;
        MyGenericArray pública (tamaño int)
        {
            Array = new T [size + 1];
        }
        T pública getItem (int index)
        {
            array [index] volver;
        }
        pública setItem void (int index, el valor de T)
        {
            array [index] = valor;
        }
    }
           
    probador de clase
    {
        static void main (String [] args)
        {
            // Declarar una matriz de enteros MyGenericArray <int> = intArray nueva MyGenericArray <int> (5);
            // Establecer el valor de (int c = 0; c <5; c ++)
            {
                intArray.setItem (c, c * 5);
            }
            // Obtener el valor de (int c = 0; c <5; c ++)
            {
                Console.Write (intArray.getItem (c) + "");
            }
            Console.WriteLine ();
            // Declarar una matriz de caracteres MyGenericArray <char> charArray = new MyGenericArray <char> (5);
            // Establecer el valor de (int c = 0; c <5; c ++)
            {
                charArray.setItem (c, (char) (c + 97));
            }
            // Obtener el valor de (int c = 0; c <5; c ++)
            {
                Console.Write (charArray.getItem (c) + "");
            }
            Console.WriteLine ();
            Console.ReadKey ();
        }
    }
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

05101520
abcde

Genéricos (genéricos) características

El uso de los genéricos es un programa para mejorar las capacidades técnicas, específicamente en los siguientes aspectos:

  • Se le ayuda a maximizar la reutilización de código, tipo de protección de la seguridad y mejorar el rendimiento.
  • Se puede crear una colección de clases genéricas. biblioteca de clases de .NET Framework contiene varias nuevas clases de colección genérica en el espacio de nombresSystem.Collections.Generic.Puede utilizar estas clases de colección genéricos en lugar clases de colecciónSystem.Collections.
  • Puede crear sus propias interfaces genéricas, clases genéricas, método genérico de eventos genéricos y delegado genérico.
  • Es posible restringir la clase genérica para acceder a los tipos de datos específicos.
  • Acerca de los tipos de datos genéricos utilizados en el tipo de información se puede obtener en tiempo de ejecución mediante la reflexión.

método genérico (genérico)

En el ejemplo anterior, hemos utilizado la clase genérica, se puede declarar un genérico parámetros de tipo de método. El programa siguiente ilustra este concepto:

using System;
utilizando System.Collections.Generic;

GenericMethodAppl de espacio de nombres
{
    Programa de clases
    {
        Intercambiar estática vacía <T> (ref T izda, dcha ref T)
        {
            temperatura T;
            temp = izda;
            lhs = rhs;
            dcha = temp;
        }
        static void main (String [] args)
        {
            int a, b;
            Char c, d;
            a = 10;
            b = 20;
            c = "I";
            d = 'V';

            // Mostrar antes de la Console.WriteLine valor de cambio ( "valores int antes de llamar swap:");
            Console.WriteLine ( "a = {0}, b = {1}", a, b);
            Console.WriteLine ( "valores de intercambio Char antes de llamar:");
            Console.WriteLine ( "c = {0}, d = {1}", c, d);

            // Intercambio de llamadas
            De intercambio <int> (REF A, ref b);
            De intercambio <char> (ref c, ref d);

            // Después de un intercambio de valor de visualización Console.WriteLine ( "valores int después de llamar swap:");
            Console.WriteLine ( "a = {0}, b = {1}", a, b);
            Console.WriteLine ( "valores Char después de llamar swap:");
            Console.WriteLine ( "c = {0}, d = {1}", c, d);
            Console.ReadKey ();
        }
    }
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

valores int antes de llamar de intercambio:
a = 10, b = 20
Char valores de intercambio antes de llamar:
c = I, d = V
Después de llamar a valores int de intercambio:
a = 20, b = 10
Después de llamar a los valores CHAR de intercambio:
c = V, d = I

Genérico (Generic) encargado

Se puede definir a través de los parámetros de tipo delegado genéricos. Por ejemplo:

delegado T NumberChanger <T> (Tn);

El siguiente ejemplo muestra el uso de la comisión:

using System;
utilizando System.Collections.Generic;

delegado T NumberChanger <T> (Tn);
GenericDelegateAppl de espacio de nombres
{
    clase TestDelegate
    {
        int num estática = 10;
        public static int AddNum (int p)
        {
            num = p +;
            num regresar;
        }

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

        static void main (String [] args)
        {
            // Crear una instancia de delegado NumberChanger <int> = NC1 nueva NumberChanger <int> (AddNum);
            NumberChanger <int> = NC2 nueva NumberChanger <int> (MultNum);
            // Llamar al método que utiliza un objeto delegado NC1 (25);
            Console.WriteLine ( "Valor de Num: {0}", getNum ());
            nc2 (5);
            Console.WriteLine ( "Valor de Num: {0}", getNum ());
            Console.ReadKey ();
        }
    }
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Valor de Num: 35
Valor de Num: 175