C sharp NET / Capítulo 8
Estructuras
La lista de similitudes entre clases y estructuras es larga: las estructuras pueden
implementar interfaces, y pueden tener el mismo tipo de miembros que las clases. Sin
embargo, las estructuras difieren de las clases en algunos puntos importantes: las
estructuras son tipos por valor en lugar de tipos por referencia, y no permiten la herencia.
Los valores de las estructuras quedan almacenados "en la pila" o "alineados". Los
programadores cuidadosos pueden a veces mejorar el rendimiento mediante un uso
meditado de las estructuras.
Por ejemplo, el uso de una estructura más bien que una clase para un Punto puede producir
una gran diferencia en el número de asignaciones producidas en memoria en tiempo de
ejecución. El siguiente programa crea e inicializa un arreglo de 100 puntos. Con Punto
implementado como clase, 101 objetos separados son inicializados ( uno para el vector y
uno para cada uno de los 100 elementos )
class Punto
{
public int x, y;
public Punto(int x, int y) {
this.x = x;
this.y = y;
}
}
class Test
{
static void Main() {
Punto[] Puntos = new Punto[100];
for (int i = 0; i < 100; i++)
{
Puntos[i] = new Punto(i, i*i);
}
}
}
Si Punto fuera implementado como una estructura, como en
struct Punto
{
public int x, y;
public Punto(int x, int y) {
this.x = x;
this.y = y;
}
}
únicamente un objeto es inicializado: el elemento del arreglo. Las instancias de Punto se
almacenan de forma alineada en el arreglo. Esta optimización puede ser mal usada. Usar
C sharp NET / Capítulo 8 2
estructuras en lugar de clases también puede hacer que una aplicación funcione más lento
o utilice más memoria, pues pasar una instancia de estructura por valor provoca que una
copia de esa estructura sea creada.
Rendimiento
Como hemos dicho, la principal ventaja por la que se usan en determinadas circunstancias
estructuras y no clases es que en circunstancias particulares éstas demuestran mucho mejor rendimiento.
Estructuras
La lista de similitudes entre clases y estructuras es larga: las estructuras pueden
implementar interfaces, y pueden tener el mismo tipo de miembros que las clases. Sin
embargo, las estructuras difieren de las clases en algunos puntos importantes: las
estructuras son tipos por valor en lugar de tipos por referencia, y no permiten la herencia.
Los valores de las estructuras quedan almacenados "en la pila" o "alineados". Los
programadores cuidadosos pueden a veces mejorar el rendimiento mediante un uso
meditado de las estructuras.
Por ejemplo, el uso de una estructura más bien que una clase para un Punto puede producir
una gran diferencia en el número de asignaciones producidas en memoria en tiempo de
ejecución. El siguiente programa crea e inicializa un arreglo de 100 puntos. Con Punto
implementado como clase, 101 objetos separados son inicializados ( uno para el vector y
uno para cada uno de los 100 elementos )
class Punto
{
public int x, y;
public Punto(int x, int y) {
this.x = x;
this.y = y;
}
}
class Test
{
static void Main() {
Punto[] Puntos = new Punto[100];
for (int i = 0; i < 100; i++)
{
Puntos[i] = new Punto(i, i*i);
}
}
}
Si Punto fuera implementado como una estructura, como en
struct Punto
{
public int x, y;
public Punto(int x, int y) {
this.x = x;
this.y = y;
}
}
únicamente un objeto es inicializado: el elemento del arreglo. Las instancias de Punto se
almacenan de forma alineada en el arreglo. Esta optimización puede ser mal usada. Usar
C sharp NET / Capítulo 8 2
estructuras en lugar de clases también puede hacer que una aplicación funcione más lento
o utilice más memoria, pues pasar una instancia de estructura por valor provoca que una
copia de esa estructura sea creada.
Rendimiento
Como hemos dicho, la principal ventaja por la que se usan en determinadas circunstancias
estructuras y no clases es que en circunstancias particulares éstas demuestran mucho mejor rendimiento.
No hay comentarios:
Publicar un comentario