SlideShare una empresa de Scribd logo
1 de 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; 
}
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; 
}
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.
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)]
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.

Más contenido relacionado

La actualidad más candente

La actualidad más candente (17)

Datos Previos
Datos PreviosDatos Previos
Datos Previos
 
Net1 oop vbnet
Net1 oop vbnetNet1 oop vbnet
Net1 oop vbnet
 
Programación ii presentación tema 5
Programación ii presentación tema 5Programación ii presentación tema 5
Programación ii presentación tema 5
 
Pooc 1
Pooc 1Pooc 1
Pooc 1
 
Definición de clases en POO
Definición de clases en POODefinición de clases en POO
Definición de clases en POO
 
Constructor Y Destructor
Constructor Y DestructorConstructor Y Destructor
Constructor Y Destructor
 
Definiciones taller 8 agost
Definiciones taller 8 agostDefiniciones taller 8 agost
Definiciones taller 8 agost
 
Constructores en java(grupo 8)
Constructores en java(grupo 8)Constructores en java(grupo 8)
Constructores en java(grupo 8)
 
Herencia y polimorfismo unidad 5 semestre 2
Herencia y polimorfismo unidad 5 semestre 2Herencia y polimorfismo unidad 5 semestre 2
Herencia y polimorfismo unidad 5 semestre 2
 
Presentacion de clases en c#
Presentacion de clases en c#Presentacion de clases en c#
Presentacion de clases en c#
 
Introduccion
IntroduccionIntroduccion
Introduccion
 
3- Clases y Objetos
3- Clases y Objetos3- Clases y Objetos
3- Clases y Objetos
 
Programación orientada a objetos (I)
Programación orientada a objetos (I)Programación orientada a objetos (I)
Programación orientada a objetos (I)
 
Constructores en Java
Constructores en JavaConstructores en Java
Constructores en Java
 
Programación orientada a objetos con c++
Programación orientada a objetos con c++Programación orientada a objetos con c++
Programación orientada a objetos con c++
 
Contructores en java(grupo 8)
Contructores en java(grupo 8)Contructores en java(grupo 8)
Contructores en java(grupo 8)
 
PROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOSPROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOS
 

Destacado

Diferencias y semejanzas del correo electronico y postal
Diferencias y semejanzas del correo electronico y postalDiferencias y semejanzas del correo electronico y postal
Diferencias y semejanzas del correo electronico y postalJoaxav
 
Lección 7 problemas de tablas conceptuales
Lección 7 problemas de tablas conceptualesLección 7 problemas de tablas conceptuales
Lección 7 problemas de tablas conceptualesbgrbhhjj
 
Tecnología y educación
Tecnología y educación Tecnología y educación
Tecnología y educación pverac
 
Copia de presntacion isamara1
Copia de presntacion isamara1Copia de presntacion isamara1
Copia de presntacion isamara1Mara Diaz
 
CONCEPTOS BASICOS DE REDES E INTERNET
CONCEPTOS BASICOS DE REDES E INTERNETCONCEPTOS BASICOS DE REDES E INTERNET
CONCEPTOS BASICOS DE REDES E INTERNETyesica23viveros
 
ensayo
ensayoensayo
ensayocruck1
 
Reporte de práctica en winqsb y en documento (poisson yexponencial) equipo 4
Reporte de práctica en winqsb y en documento (poisson yexponencial) equipo 4Reporte de práctica en winqsb y en documento (poisson yexponencial) equipo 4
Reporte de práctica en winqsb y en documento (poisson yexponencial) equipo 4Leser Lestat
 
UTILES ANTIGUOS
UTILES ANTIGUOS UTILES ANTIGUOS
UTILES ANTIGUOS Mariete
 
Hamburgensien digital – Goobi an der Stabi Hamburg
Hamburgensien digital – Goobi an der Stabi HamburgHamburgensien digital – Goobi an der Stabi Hamburg
Hamburgensien digital – Goobi an der Stabi Hamburggoobi_org
 
Datensammlung SocialLab 210913
Datensammlung SocialLab 210913Datensammlung SocialLab 210913
Datensammlung SocialLab 210913Johannes Wander
 
Proyecto 5 SEGURIDAD ACTIVA: SO Y APPS
Proyecto 5 SEGURIDAD ACTIVA: SO Y APPSProyecto 5 SEGURIDAD ACTIVA: SO Y APPS
Proyecto 5 SEGURIDAD ACTIVA: SO Y APPSjavipiris
 
Lunch business im neuen format - Vermarktungsideen für Immobilien
Lunch business im neuen format - Vermarktungsideen für ImmobilienLunch business im neuen format - Vermarktungsideen für Immobilien
Lunch business im neuen format - Vermarktungsideen für ImmobilienFabian Rieden
 

Destacado (20)

Mark zuckerberg
Mark zuckerbergMark zuckerberg
Mark zuckerberg
 
Las alergias
Las alergiasLas alergias
Las alergias
 
Diario de camapo 1
Diario de camapo 1Diario de camapo 1
Diario de camapo 1
 
Diferencias y semejanzas del correo electronico y postal
Diferencias y semejanzas del correo electronico y postalDiferencias y semejanzas del correo electronico y postal
Diferencias y semejanzas del correo electronico y postal
 
Lección 7 problemas de tablas conceptuales
Lección 7 problemas de tablas conceptualesLección 7 problemas de tablas conceptuales
Lección 7 problemas de tablas conceptuales
 
Tecnología y educación
Tecnología y educación Tecnología y educación
Tecnología y educación
 
Copia de presntacion isamara1
Copia de presntacion isamara1Copia de presntacion isamara1
Copia de presntacion isamara1
 
CONCEPTOS BASICOS DE REDES E INTERNET
CONCEPTOS BASICOS DE REDES E INTERNETCONCEPTOS BASICOS DE REDES E INTERNET
CONCEPTOS BASICOS DE REDES E INTERNET
 
ensayo
ensayoensayo
ensayo
 
Reporte de práctica en winqsb y en documento (poisson yexponencial) equipo 4
Reporte de práctica en winqsb y en documento (poisson yexponencial) equipo 4Reporte de práctica en winqsb y en documento (poisson yexponencial) equipo 4
Reporte de práctica en winqsb y en documento (poisson yexponencial) equipo 4
 
UTILES ANTIGUOS
UTILES ANTIGUOS UTILES ANTIGUOS
UTILES ANTIGUOS
 
Portafolio
PortafolioPortafolio
Portafolio
 
Hamburgensien digital – Goobi an der Stabi Hamburg
Hamburgensien digital – Goobi an der Stabi HamburgHamburgensien digital – Goobi an der Stabi Hamburg
Hamburgensien digital – Goobi an der Stabi Hamburg
 
Pensar históricamente
Pensar históricamentePensar históricamente
Pensar históricamente
 
Diario de camapo 1
Diario de camapo 1Diario de camapo 1
Diario de camapo 1
 
Noticias
NoticiasNoticias
Noticias
 
Valores en pre escolar
Valores en pre escolarValores en pre escolar
Valores en pre escolar
 
Datensammlung SocialLab 210913
Datensammlung SocialLab 210913Datensammlung SocialLab 210913
Datensammlung SocialLab 210913
 
Proyecto 5 SEGURIDAD ACTIVA: SO Y APPS
Proyecto 5 SEGURIDAD ACTIVA: SO Y APPSProyecto 5 SEGURIDAD ACTIVA: SO Y APPS
Proyecto 5 SEGURIDAD ACTIVA: SO Y APPS
 
Lunch business im neuen format - Vermarktungsideen für Immobilien
Lunch business im neuen format - Vermarktungsideen für ImmobilienLunch business im neuen format - Vermarktungsideen für Immobilien
Lunch business im neuen format - Vermarktungsideen für Immobilien
 

Similar a Tutorial de estructuras c#

Metodos Constructor Y Destructor
Metodos Constructor Y DestructorMetodos Constructor Y Destructor
Metodos Constructor Y Destructorrezzaca
 
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02Kositha Jimhiz G
 
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Sergio Sanchez
 
Arquitectura N-Capas y ADo.NET
Arquitectura N-Capas y ADo.NETArquitectura N-Capas y ADo.NET
Arquitectura N-Capas y ADo.NETRoberto Taborda
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosjent46
 
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptxFabianAndresNuezPinz
 
Los tipos de un espacio de nombres
Los tipos de un espacio de nombresLos tipos de un espacio de nombres
Los tipos de un espacio de nombresMarcel Garriga
 
Variables y metodos de instancia
Variables y metodos de instanciaVariables y metodos de instancia
Variables y metodos de instanciaRobert Wolf
 
Tarea 5
Tarea 5Tarea 5
Tarea 5ar qb
 
Proyecto en android completado
Proyecto en android completadoProyecto en android completado
Proyecto en android completadoKai Exo
 

Similar a Tutorial de estructuras c# (20)

Leguaje de programacion C#
Leguaje de programacion C#Leguaje de programacion C#
Leguaje de programacion C#
 
Datos previos
Datos previosDatos previos
Datos previos
 
Metodos Constructor Y Destructor
Metodos Constructor Y DestructorMetodos Constructor Y Destructor
Metodos Constructor Y Destructor
 
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
 
manual de C#
manual de C#manual de C#
manual de C#
 
Manual c# 2
Manual c# 2Manual c# 2
Manual c# 2
 
Manual de c#
Manual de c#Manual de c#
Manual de c#
 
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
 
Arquitectura N-Capas y ADo.NET
Arquitectura N-Capas y ADo.NETArquitectura N-Capas y ADo.NET
Arquitectura N-Capas y ADo.NET
 
Conceptos basicos POO
Conceptos basicos POOConceptos basicos POO
Conceptos basicos POO
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx
 
Los tipos de un espacio de nombres
Los tipos de un espacio de nombresLos tipos de un espacio de nombres
Los tipos de un espacio de nombres
 
Clases
ClasesClases
Clases
 
Programacion
ProgramacionProgramacion
Programacion
 
Variables y metodos de instancia
Variables y metodos de instanciaVariables y metodos de instancia
Variables y metodos de instancia
 
Introduccion
IntroduccionIntroduccion
Introduccion
 
Introduccion
IntroduccionIntroduccion
Introduccion
 
Tarea 5
Tarea 5Tarea 5
Tarea 5
 
Proyecto en android completado
Proyecto en android completadoProyecto en android completado
Proyecto en android completado
 

Más de elidetjc

Programa de eclipse
Programa de eclipsePrograma de eclipse
Programa de eclipseelidetjc
 
Programa 2
Programa 2 Programa 2
Programa 2 elidetjc
 
Programa 1
Programa 1Programa 1
Programa 1elidetjc
 
Enmuladores
EnmuladoresEnmuladores
Enmuladoreselidetjc
 
Preguntas 60
Preguntas 60Preguntas 60
Preguntas 60elidetjc
 
Examen de diagnostico_de_moviles
Examen de diagnostico_de_movilesExamen de diagnostico_de_moviles
Examen de diagnostico_de_movileselidetjc
 
Joselyn lizbeth balderas_aguirre
Joselyn lizbeth balderas_aguirreJoselyn lizbeth balderas_aguirre
Joselyn lizbeth balderas_aguirreelidetjc
 
Examen de diagnostico_de_moviles_2_22
Examen de diagnostico_de_moviles_2_22Examen de diagnostico_de_moviles_2_22
Examen de diagnostico_de_moviles_2_22elidetjc
 
Examen de diagnostico_de_moviles2
Examen de diagnostico_de_moviles2Examen de diagnostico_de_moviles2
Examen de diagnostico_de_moviles2elidetjc
 
Preguntas602
Preguntas602Preguntas602
Preguntas602elidetjc
 
Presentacion de power_de_emuladores2
Presentacion de power_de_emuladores2Presentacion de power_de_emuladores2
Presentacion de power_de_emuladores2elidetjc
 
sooooooooooooooooooffff
sooooooooooooooooooffffsooooooooooooooooooffff
sooooooooooooooooooffffelidetjc
 
Cuestionario prgts
Cuestionario prgtsCuestionario prgts
Cuestionario prgtselidetjc
 

Más de elidetjc (20)

Programa de eclipse
Programa de eclipsePrograma de eclipse
Programa de eclipse
 
Codigos
CodigosCodigos
Codigos
 
Programa 2
Programa 2 Programa 2
Programa 2
 
Programa 1
Programa 1Programa 1
Programa 1
 
Tutorial
TutorialTutorial
Tutorial
 
Enmuladores
EnmuladoresEnmuladores
Enmuladores
 
Preguntas 60
Preguntas 60Preguntas 60
Preguntas 60
 
Examen de diagnostico_de_moviles
Examen de diagnostico_de_movilesExamen de diagnostico_de_moviles
Examen de diagnostico_de_moviles
 
Joselyn lizbeth balderas_aguirre
Joselyn lizbeth balderas_aguirreJoselyn lizbeth balderas_aguirre
Joselyn lizbeth balderas_aguirre
 
Examen de diagnostico_de_moviles_2_22
Examen de diagnostico_de_moviles_2_22Examen de diagnostico_de_moviles_2_22
Examen de diagnostico_de_moviles_2_22
 
Examen de diagnostico_de_moviles2
Examen de diagnostico_de_moviles2Examen de diagnostico_de_moviles2
Examen de diagnostico_de_moviles2
 
Preguntas602
Preguntas602Preguntas602
Preguntas602
 
Presentacion de power_de_emuladores2
Presentacion de power_de_emuladores2Presentacion de power_de_emuladores2
Presentacion de power_de_emuladores2
 
Ejem8
Ejem8Ejem8
Ejem8
 
sooooooooooooooooooffff
sooooooooooooooooooffffsooooooooooooooooooffff
sooooooooooooooooooffff
 
software
softwaresoftware
software
 
Ejem5
Ejem5Ejem5
Ejem5
 
Loo toy
Loo toyLoo toy
Loo toy
 
Cuestionario prgts
Cuestionario prgtsCuestionario prgts
Cuestionario prgts
 
Ejemplo 4
Ejemplo 4Ejemplo 4
Ejemplo 4
 

Tutorial de estructuras c#

  • 1. 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; }
  • 2. 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; }
  • 3. 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.
  • 4. 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)]
  • 5. 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.