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

Constructores en java(grupo 8)
Constructores en java(grupo 8)Constructores en java(grupo 8)
Constructores en java(grupo 8)
Manuel Ch.
 
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
K Manuel TN
 
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++
Karime Hernández
 
Contructores en java(grupo 8)
Contructores en java(grupo 8)Contructores en java(grupo 8)
Contructores en java(grupo 8)
Manuel Ch.
 

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
 

Similar a Tutorial de estructuras c#

Metodos Constructor Y Destructor
Metodos Constructor Y DestructorMetodos Constructor Y Destructor
Metodos Constructor Y Destructor
rezzaca
 
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
Clasesabstractaseinterfacesalexandraperez 121220190613-phpapp02
Kositha Jimhiz G
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
jent46
 
Variables y metodos de instancia
Variables y metodos de instanciaVariables y metodos de instancia
Variables y metodos de instancia
Robert Wolf
 
Proyecto en android completado
Proyecto en android completadoProyecto en android completado
Proyecto en android completado
Kai 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 Joselyn Aguirre (20)

Presentacion del video (1)
Presentacion del video (1)Presentacion del video (1)
Presentacion del video (1)
 
Fondo de-pantalla
Fondo de-pantallaFondo de-pantalla
Fondo de-pantalla
 
Presentacion del video
Presentacion del videoPresentacion del video
Presentacion del video
 
Video
VideoVideo
Video
 
Como subir una_imagen_eclipse
Como subir una_imagen_eclipseComo subir una_imagen_eclipse
Como subir una_imagen_eclipse
 
Presentación12
Presentación12Presentación12
Presentación12
 
Presentación13
Presentación13Presentación13
Presentación13
 
Programa14
Programa14Programa14
Programa14
 
Programa5
Programa5Programa5
Programa5
 
Presentación11 vejc
Presentación11 vejc Presentación11 vejc
Presentación11 vejc
 
Programa 10
Programa 10Programa 10
Programa 10
 
sPrograma 9
sPrograma 9sPrograma 9
sPrograma 9
 
Programa8
Programa8Programa8
Programa8
 
Programa4
Programa4Programa4
Programa4
 
Programa 6
Programa 6Programa 6
Programa 6
 
Tutoria
TutoriaTutoria
Tutoria
 
Programa5
Programa5Programa5
Programa5
 
Programa 6
Programa 6Programa 6
Programa 6
 
Programa 2
Programa 2Programa 2
Programa 2
 
Programa 1
Programa 1Programa 1
Programa 1
 

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.