.NET Buenas Prácticas – Clases y estructuras


Indice de buenas practicas en .NET

 

.NET Buenas Prácticas – Clases y estructuras

No es común por los desarrolladores, pero es importante entender entre si diseñar un tipo como clase (un tipo de referencia) o como una estructura (un tipo de valor).
Para ello es crucial la diferencia entre tipos por referencia y valor.

La primera diferencia que hay que considerar es que los de referencia se asignan en el heap y pasan por el garbage collector, mientras que los de valor se asignan en el stack o inline cuando contienen tipos y se desasignan cuando el stack se desarma o cuando el tipo se desasigna. Por lo tanto, las asignaciones y desasignaciones de los tipos de valor son en general más baratas que los tipos de referencia.

Las matrices de tipos de referencia se asignan out of line, lo que significa que los elementos de la matriz son solo referencias a instancias del tipo de referencia que reside en el heap. Las matrices de tipo de valor se asignan inline, lo que significa que los elementos de la matriz son las instancias reales del tipo de valor. Por lo tanto, las asignaciones y desasignaciones de las matrices de tipo de valor son mucho más baratas que las de matrices de tipo de referencia.

Otra diferencia es respecto al uso de la memoria.
Los de valor hacen boxing cuando se convierten a un tipo de referencia o una de las interfaces que implementan y hacen unboxing cuando se devuelven al tipo de valor. Dado que los boxings son objetos que se asignan en el heap y recolectados por el garbage collector, demasiado boxing y unboxing pueden tener un impacto negativo en el heap, en el garbage collector y en el rendimiento de la aplicación. Por el contrario, no se produce este tipo de boxing cuando se emiten los tipos de referencia.

Las asignaciones de tipo de referencia copian la referencia, mientras que las asignaciones de tipo de valor copian todo el valor. Por lo tanto, las asignaciones de tipos de referencia grandes son más baratas que las asignaciones de tipos de valores grandes.

Los tipos de referencia se pasan por referencia, mientras que los tipos de valor se pasan por valor. Los cambios en una instancia de un tipo de referencia afectan a todas las referencias que apuntan a la instancia. Las instancias de tipo de valor se copian cuando se pasan por valor. Cuando se cambia una instancia de un tipo de valor, por supuesto, no afecta a ninguna de sus copias. Debido a que las copias no son creadas explícitamente por el usuario, sino que se crean implícitamente cuando se pasan los argumentos o se devuelven los valores devueltos, los tipos de valores que se pueden cambiar pueden confundir a muchos usuarios. Por lo tanto, los tipos de valor deben ser inmutables.

La mayoría de los tipos en un framework deben ser clases. Sin embargo, hay algunas situaciones en las que las características de un tipo de valor hacen que sea más apropiado utilizar estructuras.

Use una estructura en lugar de una clase si las instancias del tipo son pequeñas y, por lo general, duran poco o están comúnmente incrustadas en otros objetos.

Evite definir una estructura a menos que el tipo tenga todas las características siguientes:

-Lógicamente representa un solo valor, similar a los tipos primitivos (int, double, etc.).

-Tiene un tamaño de instancia inferior a 16 bytes.

-Es inmutable.

-No tendrá que hacer boxing con frecuencia.

En todos los demás casos, debe definir sus tipos como clases.

 

Indice de buenas practicas en .NET

 

About the author:

Matías Creimerman

Matías Creimerman
I’m a specialist in design, development and management of software solutions with almost 20 years of experience. Microsoft Certificated Professional (MCP). Expert in dot net and Microsoft technologies. Experience and skills in designing solutions in a wide range of commercial, industrial and production areas. Design of architectures, software applications and processes. Skills in leadership and team management. Tech trainer. Technology researcher. Self-taught and dedicated to continuous learning. Skills in estimation, quotation, projects proposals and solutions design. Entrepreneurial spirit. Strong Tech profile but also customer oriented. I perform roles as fullstack dev, tech consultant, technical referent, development leader, team leader, architect, cross leader, tech manager, tech director, trainer, ramp-up & follow-up teams, software factory manager, DevOps and release manager. Regular chess player and musician.

Professional Website

In

Blogger

Github

About Me

Portfolio

Wordpress - Arquitectura y desarrollo de software

Wordpress - Personal Blog

Microsoft - Youracclaim Badges

Microsoft - Tech Profile

Microsoft - ASP.NET Forum

tw
Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License
Creative Commons License
This content is property of Matias Creimerman Any misuse of this material will be punishable
This work is licensed under a International Copyright Law protects “original works of authorship”
including photographs, videos, and blog posts posted on social media sites
The content has no rights to be shared without authorization or citation to the author.
This content cannot be sold be adapted or modified partially or totally.
All content shared outside this blog that doesn’t belong to the author must have citations to the author.

Publicado por:

Matias Creimerman

I’m a specialist in design, development and management of software solutions with 20 years of experience. Microsoft Certificated Professional (MCP). Expert in dot net and Microsoft technologies. Experience and skills in designing solutions in a wide range of commercial, industrial and production areas. Design of architectures, software applications and processes. Skills in leadership and team management. Tech trainer. Technology researcher. Self-taught and dedicated to continuous learning. Skills in estimation, quotation, projects proposals and solutions design. Entrepreneurial spirit. Strong Tech profile but also customer oriented. I perform roles as fullstack dev, tech consultant, technical referent, development leader, team leader, architect, cross leader, tech manager, tech director, trainer, ramp-up & follow-up teams, software factory manager, DevOps and release manager. Regular chess player and musician.

Categorías Buenas Prácticas,CódigoEtiquetas , , , , , , , , , Deja un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s