tutorial de estructuras c#

5
Tutorial de estructuras Visual Studio .NET 2003 Personas que lo han encontrado útil: 6 de 8 - Valorar este tema Este tutorial presenta la sintaxis y el modo de uso de las estructuras. Asimismo, trata las diferencias principales entre clases y estructuras. Archivos de ejemplo Vea Ejemplo de estructuras para descargar y generar los archivos de ejemplo que se utilizan en este tutorial. Información adicional struct 1.8 Estructuras Gramática de estructuras en C. Gramática Tipos de valor Atributos de C# 17. Atributos StructLayoutAttribute (Clase) Tutorial Este tutorial incluye dos ejemplos. El primer ejemplo muestra cómo declarar y utilizar las estructuras; el segundo ilustra la diferencia entre estructuras y clases cuando se pasan instancias a los métodos. Esta sección también presenta los siguientes temas: Estructuras frente a clases ¿Montón o pila? Constructores y herencia Atributos en estructuras Ejemplo 1 En este ejemplo, se declara una estructura con tres miembros: una propiedad, un método y un campo privado. Se crea una instancia de la estructura y se pone en uso: // struct1.cs using System; struct SimpleStruct { private int xval; public int X { get { return xval; }

Upload: joselyn-aguirre

Post on 14-Jul-2015

36 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Tutorial de estructuras c#

Tutorial de estructuras Visual Studio .NET 2003

Personas que lo han encontrado útil: 6 de 8 - Valorar este tema

Este tutorial presenta la sintaxis y el modo de uso de las estructuras. Asimismo, trata las diferencias

principales entre clases y estructuras.

Archivos de ejemplo Vea Ejemplo de estructuras para descargar y generar los archivos de ejemplo que se utilizan en este

tutorial.

Información adicional

struct

1.8 Estructuras

Gramática de estructuras en C. Gramática

Tipos de valor

Atributos de C#

17. Atributos

StructLayoutAttribute (Clase)

Tutorial Este tutorial incluye dos ejemplos. El primer ejemplo muestra cómo declarar y utilizar las estructuras;

el segundo ilustra la diferencia entre estructuras y clases cuando se pasan instancias a los métodos.

Esta sección también presenta los siguientes temas:

Estructuras frente a clases

¿Montón o pila?

Constructores y herencia

Atributos en estructuras

Ejemplo 1

En este ejemplo, se declara una estructura con tres miembros: una propiedad, un método y un

campo privado. Se crea una instancia de la estructura y se pone en uso:

// struct1.cs

using System;

struct SimpleStruct

{

private int xval;

public int X

{

get

{

return xval;

}

Page 2: Tutorial de estructuras c#

set

{

if (value < 100)

xval = value;

}

}

public void DisplayX()

{

Console.WriteLine("The stored value is: {0}", xval);

}

}

class TestClass

{

public static void Main()

{

SimpleStruct ss = new SimpleStruct();

ss.X = 5;

ss.DisplayX();

}

}

Resultado The stored value is: 5

Estructuras frente a clases

Las estructuras pueden parecer muy similares a las clases, pero existen importantes diferencias que

se deben tener en cuenta. En primer lugar, las clases son tipos de referencia mientras que las

estructuras son tipos de valor. Mediante las estructuras, se pueden crear objetos que se comportan

como los tipos integrados y aprovechar sus beneficios.

¿Montón o pila?

Cuando se realiza una llamada con el operador New sobre una clase, se asigna espacio en el

montón. Sin embargo, cuando se crea una instancia de una estructura, el espacio se asigna en la

pila. De esta forma, se consigue mejorar el rendimiento. Además, a diferencia de las clases, no

tendrá que tratar con referencias a instancias de estructuras. Se trabaja directamente con la

instancia de la estructura. Debido a esto, cuando se pasa una estructura a un método, se pasa por

valor en vez de como una referencia.

Ejemplo 2

Este ejemplo muestra que cuando una estructura se pasa a un método, lo que se pasa realmente es

una copia de la estructura; sin embargo, cuando se pasa una instancia de una clase, lo que se pasa

es una referencia.

// struct2.cs

using System;

class TheClass

{

public int x;

}

Page 3: Tutorial de estructuras c#

struct TheStruct

{

public int x;

}

class TestClass

{

public static void structtaker(TheStruct s)

{

s.x = 5;

}

public static void classtaker(TheClass c)

{

c.x = 5;

}

public static void Main()

{

TheStruct a = new TheStruct();

TheClass b = new TheClass();

a.x = 1;

b.x = 1;

structtaker(a);

classtaker(b);

Console.WriteLine("a.x = {0}", a.x);

Console.WriteLine("b.x = {0}", b.x);

}

}

Resultado

a.x = 1

b.x = 5

Descripción del código

El resultado del ejemplo muestra que, cuando se pasa la instancia de clase al método classtaker,

sólo cambia el valor del campo de la clase. Sin embargo, el campo de una estructura no cambia al

pasar su instancia al método structtaker. Esto es debido a que lo que se pasa al

método structtaker es una copia de la estructura mientras que lo que se pasa al

método classtaker es una referencia a la clase.

Constructores y herencia

Las estructuras pueden declarar constructores, pero deben utilizar parámetros. Es un error declarar

un constructor predeterminado (sin parámetros) para una estructura. Los miembros de una

estructura no pueden tener inicializadores. Siempre existe un constructor predeterminado que

inicializa los miembros de la estructura con sus valores predeterminados.

Cuando se crea un objeto struct mediante el operador new, se crea y se llama al constructor

apropiado. A diferencia de las clases, se pueden crear instancias de las estructuras sin utilizar el

operador New. Si no se utiliza New, los campos permanecerán sin asignar y el objeto no se podrá

utilizar hasta haber inicializado todos los campos.

Page 4: Tutorial de estructuras c#

A diferencia de las clases, para las estructuras no existe herencia. Una estructura no puede heredar

de otra estructura o clase, ni puede ser la base de una clase. Sin embargo, las estructuras heredan

de la clase base object. Una estructura puede implementar interfaces del mismo modo que las

clases. Éste es un fragmento de código de una estructura que implementa una interfaz:

interface IImage

{

void Paint();

}

struct Picture : IImage

{

public void Paint()

{

// painting code goes here

}

private int x, y, z; // other struct members

}

Atributos en estructuras

Mediante los atributos, es posible personalizar cómo se organizan las estructuras en la memoria.

Por ejemplo, se puede crear lo que se conoce en C/C++ como unión mediante los

atributos StructLayout(LayoutKind.Explicit) y FieldOffset.

using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Explicit)]

struct TestUnion

{

[FieldOffset(0)]

public int i;

[FieldOffset(0)]

public double d;

[FieldOffset(0)]

public char c;

[FieldOffset(0)]

public byte b1;

}

En el segmento de código anterior, todos los campos de TestUnion comienzan en la misma

ubicación de la memoria.

A continuación se da otro ejemplo donde los campos comienzan en diferentes ubicaciones

establecidas de manera explícita:

using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Explicit)]

struct TestExplicit

{

[FieldOffset(0)]

public long lg;

[FieldOffset(0)]

public int i1;

[FieldOffset(4)]

Page 5: Tutorial de estructuras c#

public int i2;

[FieldOffset(8)]

public double d;

[FieldOffset(12)]

public char c;

[FieldOffset(14)]

public byte b1;

}

Los dos campos int, i1 e i2, comparten las mismas posiciones de memoria que lg. Esta clase de

control sobre la organización de una estructura es útil cuando se utilizan llamadas de la plataforma.

Conclusión

Las estructuras son sencillas de utilizar y pueden resultar muy útiles en ocasiones. Simplemente,

tenga en cuenta que se crean en la pila y que no se utilizan referencias a ellas, sino que se trata

directamente con ellas. Siempre que necesite un tipo que se utilice a menudo y que trate con

valores de datos, las estructuras constituyen una excelente opción.