Primero veremos cómo se puede definir una estructura en c#.
struct person
{
private string nombre;
private string apellido;
private int edad;
private int seguro_social;
public person(string nombre,string apellido,int edad, int seguro_social)
{
//Console.WriteLine(”Constructor”);
this.nombre = nombre;
this.apellido = apellido;
this.edad = edad;
this.seguro_social = seguro_social;
Console.WriteLine(”constructor”);
Console.Read();
}
public int edad_persona()
{
return edad;
}
}
Ahora algo de teoría del libro “Lenguaje de programación c# de Jose Antonio Gonzalez”:
Una estructura es un tipo especial de clase pensada para representar objetos ligeros. Es decir, que ocupen poca memoria y deban ser manipulados con velocidad, como objetos que representen puntos, fechas, etc. Ejemplos de estructuras incluidas en la BCL son la mayoría de los tipos básicos (excepto string y object), y de hecho las estructuras junto con la redefinición de operadores son la forma ideal de definir nuevos tipos básicos a los que se apliquen las misma optimizaciones que a los predefinidos.
Diferencias entre clases y estructuras
A diferencia de una clase y fielmente a su espíritu de “ligereza”, una estructura no puede derivar de ningún tipo y ningún tipo puede derivar de ella Por estas razones sus miembros no pueden incluir modificadores relativos a herencia, aunque con una excepción: pueden incluir override para redefinir los miembros de System.Object.
Otra diferencia entre las estructuras y las clases es que sus variables no almacenan referencias a zonas de memoria dinámica donde se encuentran almacenados objetos sino directamente referencian a objetos. Por ello se dice que las clases son tipos referencia y las estructuras son tipos valor, siendo posible tanto encontrar objetos de estructuras en pila (no son campos de clases) como en memoria dinámica (son campos de clases)
Una primera consecuencia de esto es que los accesos a miembros de objetos de tipos valor son mucho más rápidos que los accesos a miembros de pilas, ya que es necesario pasar por una referencia menos a la hora de acceder a ellos. Además, el tiempo de creación y destrucción de estructuras también es inferior. De hecho, la destrucción de los objetos almacenados en pila es prácticamente inapreciable ya que se realiza con un simple decremento del puntero de pila y no interviene en ella el recolector de basura.
Otra consecuencia de lo anterior es que cuando se realicen asignaciones entre variables de tipos valor, lo que se va a copiar en la variable destino es el objeto almacenado por la variable fuente y no la dirección de memoria dinámica a la que apuntaba ésta.