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 {

Upload: elidetjc

Post on 26-Jul-2015

27 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Tutorial de estructuras c#

Tutorial de estructurasVisual Studio .NET 2003Personas 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 ejemploVea 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)

TutorialEste 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 1En 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.csusing System;struct SimpleStruct{ private int xval; public int X { get { return xval; } set

Page 2: Tutorial de estructuras c#

{ 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(); }}

ResultadoThe stored value is: 5

Estructuras frente a clasesLas 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 2Este 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.csusing 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); }}

Resultadoa.x = 1b.x = 5

Descripción del códigoEl 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 herenciaLas 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 estructurasMediante 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;

Page 5: Tutorial de estructuras c#

[FieldOffset(4)] 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ónLas 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.