Quando usare (O meno) C # myVariable {set; ottenere; }

0

Ho cercato di capovolgere i punti più sottili di questo oggi.

Essenzialmente mi sono innamorato di questo formato per i booleani:

Class {
public static bool myBool {set; get;}
    private static void Method()
    {
        if (!myBool)
         {
            myBool = !myBool;
            // stuff that needs to be done
         }
    }
}

Cose ovvie come non usare un pubblico quando un privato funzionerà e l'ambito si applica correttamente. Ma quando è una best practice vs usando una più semplice:

Class {
bool myBool = true;
    private static void Method()
    {
        if (!myBool)
         {
            myBool = !myBool;
            // stuff that needs to be done
         }
    }
}

O ho questo indietro completamente?

Capisco che usando il formato public static bool myBool {set; get;} faccio quanto segue:

public static bool myBool
{
   get
   {
       return myBool;   
   }
   set
   {
       myBool = valuePassedIn;
   }
}

Mi sembra che il primo metodo sia l'approccio migliore, ma non ho idea del perché lo penso. C'è un migliore da queste scelte? Sto facendo qualcosa di terribilmente sbagliato, o tutti e tre i metodi equivalenti?

    
posta AthomSfere 25.11.2013 - 01:26
fonte

1 risposta

5

La chiave qui è la parola chiave statica

Usando il bool statico, la tua classe è effettivamente non a prova di bug, è anche soggetta a condizioni di gara in cui lo stato di quel booleano può essere modificato da altre aree del codice che non ti aspetti avere problemi di dipendenza downstream.

Personalmente, eviterei le variabili statiche a meno che tu non abbia una buona ragione per usarle. Eviterei anche l'uso di funzioni statiche che cambiano stato. Le funzioni statiche dovrebbero essere stateless (e hai bisogno di un buon motivo per usarle anche tu!)

Come usare lo zucchero sintattico incorporato per ottenere / impostare. È davvero lì solo per evitare la piastra. Gli utenti della classe devono accedere a questo membro? Se lo fanno, probabilmente sarà utile un'interfaccia pubblica con get / set. Permette anche di cambiare la rappresentazione interna di ciò che fanno questi accessor senza rompere il codice di interfaccia. Ma pensando a quale dovrebbe essere l'interfaccia con gli utenti esterni, dovresti guidare le tue decisioni per usare gli aiutanti sintetici e lo stato pubblico dei tuoi membri.

    
risposta data 25.11.2013 - 01:42
fonte

Leggi altre domande sui tag