Que tal, los que han usado c++, pascal, c o cualquier
lenguaje de programación con acceso a la memoria RAM, es muy probable que estén
familiarizados con los punteros o apuntadores, y para todos aquellos programadores
de la nueva escuela que comenzaron usando c#, no tienen ni la mas remota idea
de que son los punteros, ya que este lenguaje los oculta y hace transparenté el
uso de estos.
Sin embargo, es necesario conocer en que momento son usados
estos punteros en c#, ya que son totalmente transparentes para el programador.
Analicemos el siguiente bloque de código:
Tenemos declarados dos objetos:
y al momento de asignar al objeto punto2 el objeto punto, se aplica la misma teoría que en c++, y es donde se aplican los punteros.
es por eso que no piensen que un objeto es clonado a la hora de la asignacion, si no que es el mismo objeto.
ahora veamos el resultado de la corrida del programa anterior.
Analicemos el siguiente bloque de código:
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
namespace
aplicacionPunteros
{
class Program
{
static void Main(string[]
args)
{
Punto punto = new
Punto(2, 4);
Punto punto2 = punto;
punto2.X = 888;
Console.WriteLine(punto.X);
Console.WriteLine(punto.Y);
Console.WriteLine(punto2.X);
Console.WriteLine(punto2.Y);
Console.ReadKey();
}
}
class Punto
{
public int X { get; set; }
public int Y { get; set; }
public Punto()
{
}
public Punto(int x, int y)
{
this.X = x;
this.Y = y;
}
}
}
Tenemos declarados dos objetos:
Punto punto = new Punto(2, 4);
Punto punto2 = punto;
al primero objeto llamado punto se le están declarando un valor en X = 2, Y = 4, ahora bien, con el fin de establecer claro el ejemplo, declaramos un segundo objeto llamado punto2, y a continuación se le hace la asignación de punto. y se modifica la propiedad X a punto2
cuanso se asigna un objeto de la misma clase, algunas personas piensan que se realiza una clonacion del objeto, pero no es asi, lo que se esta haciendo es pasarle la referencia de su direccion de memoria en la cual esta almacenado el objeto, veamos graficamente:
tenemos la memoria RAM y al momento de hacer esta instruccion:
Punto punto = new Punto(2, 4);
estamos reservando ya sea en la memoria RAM o en el Heap.
y al momento de asignar al objeto punto2 el objeto punto, se aplica la misma teoría que en c++, y es donde se aplican los punteros.
es por eso que no piensen que un objeto es clonado a la hora de la asignacion, si no que es el mismo objeto.
ahora veamos el resultado de la corrida del programa anterior.
pero los dos valores fueron iguales, esto se debe a que cuando se realizo el siguiente codigo:
Punto punto2 = punto;
punto fue asignado a punto2, y luego punto2.X se le asigno un nuevo valor, por lo tanto, punto2, esta haciendo referencia a la direccion de memoria donde fue instanciado el objeto punto.
0 comentarios:
Publicar un comentario