Costruiamo una classe, la istanziamo e quindi assegniamo l'istanza della classe a una variabile.
Leggiamo il valore di un membro della classe nell'istanza e nella variabile. Quindi modifichiamo il membro dell'istanza ma non quello della variabile.
Se il tipo è un tipo di riferimento, il membro viene cambiato sia nell'istanza che nella variabile (la variabile contiene un riferimento all'istanza)
Se il tipo è un tipo di valore, il membro viene cambiato solo nell'istanza ma non nella variabile (la variabile contiene una copia dell'istanza)
Cominciamo con la classe:
using System; class Classe { string mNome; public Classe(string parametro) { mNome = parametro; } public void SettaNome(string parametro) { mNome = parametro; } public void StampaNome() { Console.WriteLine(mNome); Console.ReadLine(); } } class Class1 { public static void Main() { Classe Variabile; Classe miaClasse=new Classe("ciccio"); Variabile = miaClasse; miaClasse.StampaNome(); Variabile.StampaNome(); miaClasse.SettaNome("Liutprando"); miaClasse.StampaNome(); Variabile.StampaNome(); } }Ecco: ho cambiato il membro privato mNome (ma sarebbe stato più semplice cambiarne uno pubblico, vabbeh, comunque il concetto è sempre quello), da "ciccio" a "Liutprando", e il risultato è
ciccio ciccio Liutprando Liutprandoossia il membro è cambiato in ambedue: istanza e variabile.
Ora al posto di class scrivo struct, ossia invece della classe creo una struttura:
using System;
struct Classe
{
string mNome;
public Classe(string parametro)
{
mNome = parametro;
}
public void SettaNome(string parametro)
{
mNome = parametro;
}
public void StampaNome()
{
Console.WriteLine(mNome);
Console.ReadLine();
}
}
class Class1
{
public static void Main()
{
Classe Variabile;
Classe miaClasse=new Classe("ciccio");
Variabile = miaClasse;
miaClasse.StampaNome();
Variabile.StampaNome();
miaClasse.SettaNome("Liutprando");
miaClasse.StampaNome();
Variabile.StampaNome();
}
}
E il risultato stavolta è:
ciccio ciccio Liutprando ciccioossia il membro è cambiato solo nell'istanza ma non nella variabile, perché la variabile contiene una copia dell'istanza, e non un riferimento ad essa.
Nessun commento:
Posta un commento