2012-11-06 21 views
9

Ho cercato questo molto, ma nessuna delle risposte è chiara (almeno per me!). Ora sto ponendo questa domanda in SO, poiché ritengo di non poter ottenere una risposta più chiara altrove.Costruttori privati ​​vs statici in .Net

Quando devo utilizzare un costruttore privato/statico nella mia classe?

Sono stufo delle solite risposte, quindi per favore aiutatemi con alcuni esempi in tempo reale e vantaggi/svantaggi dell'utilizzo di questi costruttori.

+4

Costruttore privato - se non si desidera che il proprio oggetto sia costruibile dall'esterno della classe corrente. Costruttore statico: se è necessario inizializzare lo stato della classe statica. – zerkms

risposta

17

Costruttori statici: utilizzati per inizializzare elementi statici.

Costruttori privati: utilizzati quando si desidera creare un'istanza di classe solo all'interno del proprio codice (in genere in un metodo statico). Ad esempio:

public class Thing 
{ 
    static int Number; 

    static Thing() 
    { 
     Number = 42; // This will only be called once, no matter how many instances of the class are created 
    } 

    // This method is the only means for external code to get a new Thing 
    public static Thing GetNewThing() 
    { 
     return new Thing(); 
    } 

    // This constructor can only be called from within the class. 
    private Thing() 
    { 
    } 
} 
+4

È possibile implementare lo schema di fabbrica in questo modo, ovvero se si dispone di oggetti business che devono essere in un determinato "stato" ma si desidera impedire a terze parti/altri sviluppatori di inizializzarli utilizzando il costruttore pubblico, è possibile rendere privato il costruttore e fornire un insieme di metodi di fabbrica per creare/ottenere gli oggetti. In questo modo non possono ottenere un oggetto stateless "vuoto" dal costruttore (a meno che non vogliano, ad esempio, riflettere) – Charleh

+1

Il costruttore statico può anche essere utilizzato per richiamare il costruttore privato, che a sua volta istanzia un membro statico privato contenente il tipo di classe. Di funzione statica/proprietà può solo restituire questo membro, quindi c'è sempre solo un'istanza di tale oggetto - un singleton. – jwaliszko

3

costruttore statico viene utilizzato per inizializzare i membri statici della classe e viene chiamato quando viene creata la prima istanza della classe o un membro statico si accede per la prima volta.

costruttore privato viene utilizzato se si dispone di overload del costruttore, e alcuni di loro dovrebbe essere utilizzato solo da parte degli altri costruttori

8

Quando devo usare un costruttore privato nella mia classe?

Quando si desidera un costruttore, ma non si vuole esporlo al mondo. Ciò potrebbe essere dovuto al fatto che si dispone di un metodo factory che chiama il costruttore (dopo la convalida) o perché tale costruttore viene chiamato da ctor-chaining (ad esempio public Foo(string) : this() { ...}).

Inoltre, si noti che il codice di riflessione è spesso in grado di utilizzare un costruttore privato, ad esempio la serializzazione o le librerie ORM.

Inoltre, nei primi compilatori C#, quando si scrive quello che ora sarebbe una classe static, avere un costruttore privato era l'unico modo per renderlo non visualizzabile.

Quando devo utilizzare un costruttore statico nella mia classe?

Quando è necessario inizializzare uno stato statico prima che lo stato acceda alle istanze o ai metodi statici.