InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Tutorial C#
Introduccion a C#
Programacion con C#
Fundamentos de C#
Operadores
Instrucciones
Estrcuturas de control.
Definición de clases
Creación de objetos
Herencia y métodos virtuales
Polimorfismo
Ocultación de miembros
Miembros de tipo
Encapsulación
Espacios de nombres
Importación de espacios de nombres
Espacio de nombres distribuidos
Variables y tipos de datos
Tablas unidimensionales
Tablas multidimensionales
La clase System.Array
Cadenas de texto
Constantes
Orden de inicialización de variables
Métodos
Métodos externos
Constructores
Destructores
Propiedades
Indizadores
Redefinición de operadores
Delegados y eventos
La clase MulticastDelegate
Llamadas asíncronas
Implementación interna de los delegados
Eventos
Estructuras
Boxing y unboxing
Constructores de estructuras
Enumeraciones
Interfaces
Excepciones
Otras instrucciones
Atributos
Definición de nuevos atributos
Lectura de atributos en tiempo de ejecución
Atributos de compilación
Pseudoatributos
Código inseguro
Definición de punteros
Manipulación de punteros
Operadores relacionados con código inseguro
Fijación de variables apuntadas
Novedades de C# 2.0
Genéricos
Tipos parciales
Iteradores
Mejoras en la manipulación de delegados
Tipos anulables
Modificadores de visibilidad de bloques get y set
Clases estáticas
Referencias a espacios de nombres
Supresión temporal de avisos
Atributos condicionales
Incrustación de tablas en estructuras
Modificaciones en el compilador
También puedes ver ...
SubVersion y Visual Studio
Encriptación con AES Rijndael - Ejemplo
TripleDES - Un ejemplo practico en C#
Insertar una marca de agua en documentos PDF
Serialización: XmlSerializer y BinaryFormater
Handler para manipular imagenes
Conversiones de tipos personalizadas (VB y C#)
Compresión por gzip y deflate
La página Web que está abriendo contiene tanto elementos seguros como no seguros.
Cómo insertar un fichero .xml en un campo de tipo XML de SQL server 2005 o 2008


Estructuras

Concepto de estructura

    Una estructura es un tipo especial de clase pensada para representar objetos ligeros. Es decir, que ocupen poca memoria y deban ser manipulados con velocidad, como objetos que representen puntos, fechas, etc. Ejemplos de estructuras incluidas en la BCL son la mayoría de los tipos básicos (excepto string y object), y de hecho las estructuras junto con la redefinición de operadores son la forma ideal de definir nuevos tipos básicos a los que se apliquen las mismas optimizaciones que a los predefinidos.

Diferencias entre clases y estructuras

    A diferencia de una clase y fiel a su espíritu de “ligereza”, una estructura no puede derivar de ningún tipo y ningún tipo puede derivar de ella. Por estas razones sus miembros no pueden incluir modificadores relativos a herencia, aunque con una excepción: pueden incluir override para redefinir los miembros de System.Object.

    Otra diferencia entre las estructuras y las clases es que sus variables no almacenan referencias a zonas de memoria dinámica donde se encuentran almacenados objetos sino directamente referencian a objetos. Por ello se dice que las clases son tipos referencia y las estructuras son tipos valor, siendo posible tanto encontrar objetos de estructuras en pila (no son campos de clases) como en memoria dinámica (son campos de clases)

    Una primera consecuencia de esto es que los accesos a miembros de objetos de tipos valor son mucho más rápidos que los accesos a miembros de pilas, ya que es necesario pasar por una referencia menos a la hora de acceder a ellos. Además, el tiempo de creación y destrucción de estructuras también es inferior. De hecho, la destrucción de los objetos almacenados en pila es prácticamente inapreciable ya que se realiza con un simple decremento del puntero de pila y no interviene en ella el recolector de basura.

    Otra consecuencia de lo anterior es que cuando se realicen asignaciones entre variables de tipos valor, lo que se va a copiar en la variable destino es el objeto almacenado por la variable fuente y no la dirección de memoria dinámica a la que apuntaba ésta. Por ejemplo, dado el siguiente tipo (nótese que las estructuras se definen igual que las clases pero usando la palabra reservada struct en vez de class):


struct Point
{
 public int x, y;
 
 public Point(int x, int y)
 {
  this.x = x;
  this.y = y;
 }
}

    Si usamos este tipo en un código como el siguiente:


Punto p = new Punto(10,10);
Punto p2 = p;
p2.x = 100;
Console.WriteLine(p.x);

    Lo que se mostrará por pantalla será 10. Esto se debe a que el valor de x modificado es el de p2, que como es una copia de p los cambios que se le hagan no afectarán a p. Sin embargo, si Punto hubiese sido definido como una clase entonces sí que se hubiese mostrado por pantalla 100, ya que en ese caso lo que se habría copiado en p2 habría sido una referencia a la misma dirección de memoria dinámica referenciada por p, por lo que cualquier cambio que se haga en esa zona a través de p2 también afectará a p.

    De lo anterior se deduce que la asignación entre objetos de tipos estructuras es mucho más lenta que la asignación entre objetos de clases, ya que se ha de copiar un objeto completo y no solo una referencia. Para aliviar esto al pasar objetos de tipos estructura como parámetros, se da la posibilidad de pasarlos como parámetros por referencia (modificador ref) o parámetros de salida (out) en vez de como parámetros de entrada.

    Todas las estructuras derivan implícitamente del tipo System.ValueType, que a su vez deriva de la clase primigenia System.Object. ValueType tiene los mismos miembros que su padre, y la única diferencia señalable entre ambos es que en ValueType se ha redefinido Equals() de modo que devuelva true si los objetos comparados tienen el mismo valor en todos sus campos y false si no. Es decir, la comparación entre estructuras con Equals() se realiza por valor.

    Respecto a la implementación de la igualdad en los tipos definidos como estructuras, también es importante tener muy en cuenta que el operador == no es en principio aplicable a las estructuras que defina el programador. Si se desea que lo tenga ha de dársele explícitamente una redefinición al definir dichas estructuras.


Inicio | Tutorial C# EventosTutorial C#Boxing y unboxing Versión para imprimir Foros de consulta

 
como declaro un arreglo de est... por Anónimo
Respuesta recibida el [14/09/2007 01:44:35]
como declaro un arreglo de estructura

 
lkk por lokj
Respuesta recibida el [24/11/2008 07:47:00]
solo queroa egemplos de estructuras

 
Estructuras por Sebastian
Respuesta recibida el [18/07/2009 04:31:13]
Excelente articulo, estoy preparando un examen de MS y me ha servido mucho :)


 
public int por struct point
Respuesta recibida el [13/08/2009 03:54:36]
struct Point
{
public int x, y;

public Point(int x, int y)
{
this.x = x;
this.y = y;

 
Arreglos de estructuras por Frank Guillen
Respuesta recibida el [26/11/2009 08:28:53]
Como hago para crear un arreglo de estructuras. No encuentro por ningún lado esa información.

 
For en C por alummno1ºASI
Respuesta recibida el [11/12/2009 05:08:08]
Hola, queria saber que funciones de for hay y los tipos de for, xq yo solo se q es un tipo de estructura repetitiva y siempre la hago de la misma forma: for(ini_expr;condición;incr_expr) sentencia;



Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



Inicio | Tutorial C# EventosTutorial C#Boxing y unboxing Versión para imprimir

Estructuras
Autor: José Antonio González Seco
Visitas: 21992 Fecha de publicación: 27/10/2006
José Antonio es experto en tecnologias Microsoft. Imparte cursos y conferencias en congresos sobre C# y .NET en Universidades de toda España (Sevilla, Barcelona, San Sebastián, Valencia, Oviedo, etc.) en representación de grandes empresas como Microsoft.




Visitas: 106 | Comentarios: 3 | Archivo: Articulos
02/02/2010 iPad vs Telesketch
Visitas: 802 | Comentarios: 2 | Archivo: Articulos
Categorias: Humor
Visitas: 756 | Comentarios: 3 | Archivo: Articulos
Visitas: 3167 | Comentarios: 2 | Archivo: Articulos
Categorias: C#
Visitas: 14541 | Comentarios: 7 | Archivo: Articulos
Categorias: C#|Seguridad
Visitas: 1489 | Comentarios: 3 | Archivo: Articulos
Visitas: 695 | Comentarios: 2 | Archivo: Articulos
Visitas: 369 | Comentarios: 0 | Archivo: Articulos
Visitas: 2028 | Comentarios: 2 | Archivo: Articulos
Categorias: C#

Útimos temas recibidos en los foros ...
certificado pensiones horizonte por angela patricia rodriguez ... [Actualidad] 136 26/01/2010
Solicitud certificado de afiliaciones a pensiones y cesantias proteccion por hz ... [Actualidad] 59 10/02/2010
necesito certificado de afiliacíon a pensiones por jelo ... [Actualidad] 0 12/03/2010
Certificado de afiliacion AFP (PENSIONES) Horizonte por Sandris ... [Actualidad] 70 30/01/2010
certificado de penciones porvenir por caro ... [Actualidad] 1 12/03/2010
vendedora por caro ... [Actualidad] 2 12/03/2010
certificado de afiliacion por jeison ... [Actualidad] 0 12/03/2010
CERTIFICADO DE AFILIACION A PROTECCION por LEIDYS ... [Actualidad] 21 11/02/2010
certificado de afiliación de pensiones y cesantias por secre ... [Actualidad] 116 28/01/2010
urgente porfabor requiero el certificado que pertenesco a esta entidad en penciones para poder trabajar por wilmer ... [Access] 0 12/03/2010
certificado de pensiones del bbva horizonte por danger ... [Actualidad] 124 12/01/2010
pensiones por 29285524 ... [Access] 2 12/03/2010

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
17/07/2006 Tipo VARRAY    forma parte de...Tutorial PL/SQL
27/08/2007 Enviar email con C#
01/01/2005 Introducción a las bases de datos    forma parte de...Iniciación a las bases de datos
01/06/2007 Autogenerado ESSALUD (Solución)
06/11/2007 Cursores en Transact SQL    forma parte de...Tutorial de Transact SQL
14/05/2007 Fundamentos de Transact SQL    forma parte de...Tutorial de Transact SQL
22/10/2005 Consultas combinadas. JOINS    forma parte de...Tutorial SQL
24/07/2006 SQL Dinamico    forma parte de...Tutorial PL/SQL
29/04/2008 Leer un campo XML de SQL Server 2005 con C#
30/12/2007 Novedades en C# 3.0 - Primeros pasos con LINQ

 

Encuesta
¿A que perfil te adaptas mejor?




[Ver] [Votar]