C# | Genéricos – Introducción

Genérico es una clase que permite al usuario definir clases y métodos con el marcador de posición. Se agregaron genéricos a la versión 2.0 del lenguaje C#. La idea básica detrás del uso de Generic es permitir que el tipo (entero, string, etc. y tipos definidos por el usuario) sea un parámetro para métodos, clases e interfaces. Una limitación principal de las colecciones es la ausencia de verificación de tipos efectiva. Esto significa que puede poner cualquier objeto en una colección porque todas las clases en el lenguaje de programación C# se extienden desde la clase base del objeto. Esto compromete la seguridad de tipos y contradice la definición básica de C# como un lenguaje de tipos seguros. Además, el uso de colecciones implica una sobrecarga de rendimiento significativa en forma de conversión de tipo implícita y explícita que se requiere para agregar o recuperar objetos de una colección.
Para abordar el problema de seguridad de tipos, .NET Framework proporciona genéricos para crear clases, estructuras, interfaces y métodos que tienen marcadores de posición para los tipos que usan. Los genéricos se usan comúnmente para crear colecciones con seguridad de tipos para tipos de referencia y de valor. El marco .NET proporciona un amplio conjunto de interfaces y clases en el espacio de nombres System.Collections.Generic para implementar colecciones genéricas.

Clase genérica

Los genéricos en C# son su característica más poderosa. Le permite definir las estructuras de datos de tipo seguro. Esto se traduce en un aumento notable del rendimiento y un código de alta calidad, ya que ayuda a reutilizar los algoritmos de procesamiento de datos sin replicar el código específico del tipo. Los genéricos son similares a las plantillas en C++ pero son diferentes en implementación y capacidades. Generics introduce el concepto de parámetros de tipo, gracias a los cuales es posible crear métodos y clases que difieren el encuadre del tipo de datos hasta que la clase o el método se declaran y el código del cliente los instancia. Los tipos genéricos funcionan mejor que los tipos de sistema normales porque reducen la necesidad de encajonar, desempaquetar y convertir las variables u objetos.
Los tipos de parámetros se especifican en la creación de clases genéricas.

Para crear objetos de clase genérica, se utiliza la siguiente sintaxis:

BaseType  obj = new BaseType ()

Ejemplo:

// C# program to show working of 
// user defined Generic classes
using System;
  
// We use < > to specify Parameter type
public class GFG<T> {
      
    // private data members
    private T data;
      
    // using properties
    public T value
    {
          
        // using accessors
        get
        {
            return this.data;
        }
        set
        {
            this.data = value;
        }
    }
}
  
// Driver class
class Test {
      
    // Main method
    static void Main(string[] args)
    {
          
        // instance of string type
        GFG<string> name = new GFG<string>();
        name.value = "GeeksforGeeks";
          
        // instance of float type
        GFG<float> version = new GFG<float>();
        version.value = 5.0F;
          
        // display GeeksforGeeks
        Console.WriteLine(name.value); 
          
        // display 5
        Console.WriteLine(version.value); 
    }
}

Producción :

GeeksforGeeks
5

Explicación: El ejemplo anterior define una clase genérica, GFG , que utiliza un parámetro de tipo genérico ‘T’. En el método Main(), se han creado dos instancias de GFG reemplazando ‘T’ con los tipos de datos ‘string’ y ‘float’. Estos objetos se utilizan para almacenar valores de ‘string’ y ‘flotante’ respectivamente. La clase GFG garantiza la seguridad de tipos al aceptar el tipo requerido en su constructor.

Un método genérico con varios parámetros: así como un método puede tomar un argumento, los genéricos pueden tomar varios parámetros. Un argumento se puede pasar como un tipo familiar y otro como un tipo genérico, como se muestra a continuación:

  • Ejemplo:

    // C# program to show multiple
    // type parameters in Generics
    using System;
      
    public class GFG {
          
        // Generics method
        public void Display<TypeOfValue>(string msg, TypeOfValue value)
        {
            Console.WriteLine("{0}:{1}", msg, value);
        }
    }
      
    // Driver class
    public class Example {
          
        // Main Method
        public static int Main()
        {
              
            // creating object of class GFG
            GFG p = new GFG();
              
            // calling Generics method
            p.Display<int>("Integer", 122);
            p.Display<char>("Character", 'H');
            p.Display<double>("Decimal", 255.67);
            return 0;
        }
    }

    Producción :

    Integer:122
    Character:H
    Decimal:255.67
    

Características de los genéricos

Generics es una técnica que mejora sus programas de muchas maneras, tales como:

  • Le ayuda en la reutilización de código, el rendimiento y la seguridad de tipos.
  • Puede crear sus propias clases genéricas, métodos, interfaces y delegados.
  • Puede crear clases de colección genéricas. La biblioteca de clases de .NET Framework contiene muchas clases de colección genéricas nuevas en el espacio de nombres System.Collections.Generic.
  • Puede obtener información sobre los tipos utilizados en el tipo de datos genéricos en tiempo de ejecución.

Ventajas de los genéricos

  • Reutilización: puede usar una sola definición de tipo genérico para múltiples propósitos en el mismo código sin ninguna alteración. Por ejemplo, puede crear un método genérico para sumar dos números. Este método se puede usar para agregar dos enteros y dos flotantes sin ninguna modificación en el código.
  • Seguridad de tipos: los tipos de datos genéricos proporcionan una mejor seguridad de tipos, especialmente en el caso de las colecciones. Al usar genéricos, debe definir el tipo de objetos que se pasarán a una colección. Esto ayuda al compilador a asegurarse de que solo los tipos de objetos definidos en la definición se puedan pasar a la colección.
  • Rendimiento: los tipos genéricos proporcionan un mejor rendimiento en comparación con los tipos de sistemas normales porque reducen la necesidad de encasillar, desempaquetar y encasillar variables u objetos.

Publicación traducida automáticamente

Artículo escrito por Akanksha_Rai y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Categories C#

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *