Direte che ho fatto una scoperta idiota. In realtà no.
Proprio perchè il mio blog lo intendo come un diario dove appuntare tutte le
pifferate che combino, ritengo opportuno scriverci pure questo.
In realtà sapevo che i membri statici erano condivisi, ma il problema vero è
che avevo scritto un pezzo di codice - errato - dove riuscivo ad avere un valore
per il membro statico diverso per ogni istanza di una classe che avevo
dichiarato. Come ci sono riuscito non lo sò nemmeno io, però più guardavo
esterefatto il risultato che ottenevo e più leggevo nell'MSDN questo paragrafo:
"Static class members can be used to separate data and
behavior that is independent of any object identity: the data and functions do
not change regardless of what happens to the object." e più mi
innervosivo sul perchè.
Diciamo che un "mea culpa" me lo devo anche rimproverare, perchè - forse non
sarò il solo - sono solito leggere un pò tutto con quello che gli inglesi
chiamano skimming (cioè a saltoni) in particolari su testi che riguardano
argomenti che spesso non ti interessano proprio a fondo. Poi, lo skimming, a
volte, dipende pure da fattori esterni: quante volte mi è capitato di
stare assorto nella lettura e arriva il rompicocomeri di turno che ti distrae, o
il telefono che suona, e così quando riprendi, ecco che ti sei perso magari una
linea o un paragrafo intero. E nel mio caso, mi ero perso questo pezzo: "To access a static class member, use the name of the class
instead of a variable name to specify the location of the
member."
Una lancia in mio favore però me la voglio spezzare. Ad
essere onesto l'help non brilla proprio per immediatezza nella comprensione. Per
lo meno questa è la mia impressione. Ma è una cosa che ho notato da sempre.
Certo scrivere un libro è difficile: scrivi, rivedi, correggi, riscrivi. Ma se
l'MSDN fornisse almeno esempi un peletto più comprensibili, penso che eviteri (e
spero le evitereste pure voi - ma può essere che di cretini qua ce ne sia uno
solo: chi scrive) tante figure barbine.
Per fortuna "San Google Aiutami Tu" ... dopo un pò di ricerche mi ha proposto
questa bella pagina, dalla quale riprendo l'esempio - modificandolo in
parte - e lo ripropongo caso mai un giorno l'autore (al quale ho richiesto
l'autorizzazione) dovesse cancellare tutto.
class StaticMember{
public static int thisStaticMember;
public int JustAnotherVariable;
public void Print(){
Console.WriteLine("thisStaticMember = {0}
JustAnotherVariable = {1};",
thisStaticMember,
JustAnotherVariable);
}
}
[STAThread]
static void Main()
{
StaticMember a = new StaticMember();
a.JustAnotherVariable = 1;
StaticMember b = new StaticMember();
b.JustAnotherVariable = 2;
// Here the code modify the value of class.staticMember
StaticMember.thisStaticMember = 4;
a.Print();
b.Print();
}
/*
Output:
thisStaticMember = 4 JustAnotherVariable = 1;
thisStaticMember = 4 JustAnotherVariable = 2;
*/