TOC

This article is currently in the process of being translated into Spanish (~99% done).

Advanced topics:

Structs

Las estructuras en C# son una alternativa ligera de una clase. Pueden hacer casi lo mismo que una clase, pero es menos costoso usar una estructura que una clase. La razón para esto es un poco técnica, pero para resumir, nuevas instancias de una clase son ubicadas en el monticulo, mientras las estructuras instanciadas recientemente son colocadas en la pila. Además, no está lidiando con referencias a estructuras, como con las clases, sino en vez de eso está trabajando directamente con la instancia de estructura. Esto también significa que cuando pasa una estructura a una función, es por valor, en vez de una referencia. Hay más acerca de esto en el capítulo acerca de parámetros de funciones.

Entonces, debería usar estructuras cuando desee representar estructuras de datos más simples, y especialmente si sabe que estará instanciando muchas de ellas. Hay muchos ejemplos en el ambiente .NET, donde Microsoft ha usado estructuras en vez de clases, por ejemplo las estructuras Point, Rectangle y Color.

Primero me gustaría mostrarle un ejemplo del uso de una estructura, y luego discutiremos algunas de las limitaciones de su uso en vez de usar clases:

class Program
{
    static void Main(string[] args)
    {
        Car car;

        car = new Car("Blue");
        Console.WriteLine(car.Describe());

        car = new Car("Red");
        Console.WriteLine(car.Describe());

        Console.ReadKey();
    }
}

struct Car
{
    private string color;

    public Car(string color)
    {
        this.color = color;
    }

    public string Describe()
    {
        return "This car is " + Color;
    }

    public string Color
    {
        get { return color; }
        set { color = value; }
    }
}

El lector observante notará que este es el mismísimo código de ejemplo usado en la introducción a clases, además de los cambios de una clase a una estructura. Esto va a mostrar que tan similares con los dos conceptos. Pero ¿Cómo difieren, además de la mención de los detalles técnicos en el inicio de este capítulo?

Primero, los campos no pueden tener inicializadores, significa que no puede declarar un miembro como este:

private string color = "Blue";

Si declara un constructor, todos sus campos deben ser asignados antes de dejar el contructor. Una estructura viene con un constructor por omisión, pero tan pronto como usted elija definir el suyo propio, usted acuerda en inicializar todos los campos en él. Eso también significa que no puede declarar sus propio constructor sin parámetros - todo constructor de estructura tiene que tomar al menos un parámetro. En nuestro ejemplo de arriba, de hecho asignamos un valor al campo color. Si no hubiesemos hecho eso, el compilador se quejaría.

Una estructura no puede heredar de otras clases o estructuras, y las clases no pueden heredar de estructuras. Una estructura hereda de la clase Object, pero eso es todo en cuanto a herencia y estructuras. Aunque ellas soportan interfaces, significa que sus estructuras pueden implementar interfaces personalizadas.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!