Reference Types: sono gli oggetti, sono sempre passati come riferimento. Possono essere messi a null, e quando si esegue una assegnazione in realtà non viene fisicamente copiata la memoria, ma ridiretto il puntatore.
Definisco Punto come classe:
public class PuntoClass
{
private double _x, _y, _z;
public PuntoClass(double x1, double y1, double z1)
{
updateCoords(x1, y1, z1);
}
public void printPunto(string name )
{
Console.WriteLine("{0} x = {1}, y ={2}, z = {3}",name, _x, _y, _z);
}
public void updateCoords(double x1, double y1, double z1)
{
_x = x1;
_y = y1;
_z = z1;
}
};
E lo uso:
static void Main(string[] args)
{
PuntoClass pc0 = new PuntoClass(0,0,0); //non c'e' il costruttore di default
PuntoClass pc1 = new PuntoClass(10, 20, 30);
PuntoClass pc2 = pc1;
pc0.printPunto("Class P0: ");
pc1.printPunto("Class P1: ");
pc2.printPunto("Class P2: ");
pc1.updateCoords(11, 22, 33);
pc1.printPunto("Class P1 dopo: ");
pc2.printPunto("Class P2 dopo: ");
}
Il risultato:
Class PO: x = 0, y = 0; y = 0
Class P1: x = 10, y = 20; y = 30
Class P2: x = 10, y = 20; y = 30
Class P1 dopo: x = 11, y = 22; y = 33
Class P2 dopo: x = 11, y = 22; y = 33
Dopo la modifica di p1, p2 è “ovviamente” cambiato in quanto entrambe i puntatori facevano riferimento alla stessa cella di memoria, l’aggiornamento attraverso l’uno o l’altro puntatore è assolutamente equivalente.
I riferimenti completi sono in http://msdn2.microsoft.com/en-us/library/490f96s2.aspx .