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;
*/