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 ...
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
Comparativa de sentencias VB.Net vs C#
Aprende Ajax desde cero
Creando cadenas de conexión ConnectionStrings en .net 3.5 o visual Studio 2008 usando SqlConnectionStringBuilder
Migración de WSE a WCF (Web Services de 2005 a 2008)

Afiliados
La Web del programador
MundoProgramacion


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


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: 16294 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: 201 | Comentarios: 0 | Archivo: Articulos
Categorias: C#
Visitas: 315 | Comentarios: 1 | Archivo: Articulos
Visitas: 390 | Comentarios: 1 | Archivo: Articulos
Categorias: Humor
Visitas: 615 | Comentarios: 3 | Archivo: Articulos
Categorias: C#|ASP.NET
Visitas: 1177 | Comentarios: 4 | Archivo: Articulos
Visitas: 697 | Comentarios: 1 | Archivo: Articulos
Categorias: ASP.NET|ASP|Windows XP|Windows 2003
Visitas: 828 | Comentarios: 2 | Archivo: Articulos
Categorias: Java|Solaris
Visitas: 584 | Comentarios: 0 | Archivo: Articulos
Visitas: 1484 | Comentarios: 1 | Archivo: Articulos
Categorias: ADO.NET
Visitas: 1533 | Comentarios: 3 | Archivo: Articulos
Categorias: ASP.NET

Útimos temas recibidos en los foros ...
Manual Visual Studio.NET por Shiko ... [Visual Basic .NET] 34 26/10/2006
llamar procedimientos de pl/sql en java por jhon ... [ORACLE] 0 03/07/2009
consulta multitablas por anga ... [mySQL] 0 03/07/2009
objetos helper php bajo oracle por objetos_helper_oracle ... [ISAPI] 0 02/07/2009
ranuras isa o pci por sara ... [Access] 5 30/03/2006
descargar tutorial C# por afmp ... [C#] 54 14/10/2008
Tutorial TOAD para Oracle en Español por ijpj ... [ORACLE] 19 14/03/2009
quiero mi numero de mi autogenerado por pablo ... [Visual Basic .NET] 1 15/06/2009
Ayuda con cargar fotografias de otra pc por Alex ... [ASP.NET] 0 01/07/2009
splash screen por zelca ... [Visual Basic .NET] 0 01/07/2009
Error de inicio de aplicación por Danrre ... [C#] 0 30/06/2009
sumar los precios de la columna "precio" del grig por jardinderosas ... [C#] 7 01/11/2007

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 ...
21/07/2006 Funciones integradas de PL/SQL    forma parte de...Tutorial PL/SQL
14/01/2008 Novedades Visual Studio 2008 DataSet en 3 capas o MVC
12/06/2007 Estructuras de control en Transact SQL    forma parte de...Tutorial de Transact SQL
01/06/2006 Cursores de actualización en PL/SQL    forma parte de...Tutorial PL/SQL
01/01/2006 Borrado de datos. DELETE    forma parte de...Tutorial SQL
13/04/2008 Métodos Extensores: INNER JOIN    forma parte de...Linq y Métodos extensores
28/06/2006 Excepciones en PL/SQL    forma parte de...Tutorial PL/SQL
03/10/2006 Herencia y métodos virtuales    forma parte de...Tutorial C#
14/07/2007 Como encriptar texto y variables usando algoritmos estandard como DES o TRIPLEDES
03/10/2006 Creación de objetos    forma parte de...Tutorial C#

 

Encuesta
¿A que perfil te adaptas mejor?
[Ver] [Votar]