Objetos
Un objeto es cualquier cosa real o abstracta que posee una estructura que lo define
y acciones que lo controlan.
Un objeto presenta una identidad, un estado y un comportamiento en un momento
dado.
Clase
Abstracción
Herencia
Polimorfismo
GetType : es un método que devuelve un valor que identifica el tipo del objeto. El
valor proporcionado se suele utilizar normalmente en operaciones de reflexión.
MenberwiseClone : devuelve un objeto del mismo tipo y que inicializa sus campos
y propiedades a fin de que el nuevo objeto pueda ser considerado una copia
Como todas las clases heredan de System.Object, todas ellas exponen los cinco
métodos que también expone System.Object, estos son:
Equals: Un método remplazable que verifica si el objeto actual tiene el mismo valor
que el objeto que se ha pasado como argumento, devuelve un boleano.
Cuando creamos tipos por valor, el valor de la variable de este tipo se almacena en
el Stack, si asignamos una variable de estas características a otra, se crea una copia
en el Stack. Al destruir un tipo por valor, se destruye también el valor que se guardó
en el Stack.
Cuando creamos un tipo por referencia, en realidad lo que guardamos en el Heap
es una dirección de memoria que apunta a un valor, pero no al valor en si mismo.
Si asignamos una variable que contiene un tipo por referencia a otra variable, se
dice que ambas se refieren al mismo valor. Los tipos por referencia si pueden
contener valores nulos.
Boxining y Unboxining
Boxing permite a cualquier tipo de dato por valor ser convertido de manera explícita
a un valor de tipo objeto. Boxing es el proceso en donde las instancias de un
objeto son creadas y sus valores son copiados directamente a la instancia.
Tipo String
Optimización de la Cadena
Un importante detalle que deberá recordar es que un objeto string es inmutable (una
vez que cree un string no podrá cambiar su contenido).
Las aplicaciones .NET podrán optimizar la administración de las cadenas sin mas
que mantener un grupo interno de valores de cadena conocido como grupo interno
(o pool interno). Si el valor que se ha asignado a una variable de cadena coincide
con una de las cadenas contenida ya en el grupo interno, no se reservara memoria
adicional y la variable recibirá la dirección del valor de la cadena en el grupo.
Sin embargo, este paso de optimización no se llevara a cabo en tiempo de
ejecución.