classi statiche può essere utile in certe situazioni, ma c'è un potenziale di abuso e/o uso eccessivo, come la maggior parte caratteristiche del linguaggio.
Come già detto da Dylan Smith, il caso più ovvio per l'utilizzo di una classe statica è se si dispone di una classe con solo metodi statici. Non ha senso consentire agli sviluppatori di creare un'istanza di una classe del genere.
L'avvertenza è che una sovrabbondanza di metodi statici può di per sé indicare un difetto nella strategia di progettazione. Trovo che quando si crea una funzione statica, è un bene chiedersi - sarebbe meglio adatto come a) un metodo di istanza, o b) un metodo di estensione di un'interfaccia. L'idea qui è che i comportamenti degli oggetti sono generalmente associati allo stato dell'oggetto, il che significa che il comportamento dovrebbe appartenere all'oggetto. Utilizzando una funzione statica si sta implicando che il comportamento non dovrebbe appartenere a un particolare oggetto.
La progettazione di elementi polimorfici e interfacciati è ostacolata dall'uso eccessivo di funzioni statiche: non possono essere sostituite in classi derivate, né possono essere collegate a un'interfaccia.Solitamente è meglio avere le proprie funzioni di "helper" legate a un'interfaccia tramite un metodo di estensione tale che tutte le istanze dell'interfaccia abbiano accesso a quella funzionalità di "supporto" condivisa.
Una situazione in cui le funzioni statiche sono sicuramente utili, secondo me, è nella creazione di un metodo .Create() o .New() per implementare la logica per la creazione dell'oggetto, ad esempio quando si desidera eseguire il proxy dell'oggetto che si sta creando,
public class Foo
{
public static Foo New(string fooString)
{
ProxyGenerator generator = new ProxyGenerator();
return (Foo)generator.CreateClassProxy
(typeof(Foo), new object[] { fooString }, new Interceptor());
}
Questo può essere utilizzato con un quadro proxy (come il Castello dinamica Proxy) in cui si desidera intercettare/iniettare funzionalità in un oggetto, in base a esempio, certi attributi assegnati ai suoi metodi. L'idea generale è che hai bisogno di un costruttore speciale perché tecnicamente stai creando una copia dell'istanza originale con funzionalità aggiuntive speciali.
fonte
2011-10-28 19:24:21
classi/metodi statici sono ad esempio utili per implementare il modello Singleton e il modello Factory ... – Yahia
@Yahia: schema Singleton con classi statiche? [Non credo.] (Http://stackoverflow.com/questions/3565482/can-singleton-class-be-static/3565496#3565496) – BoltClock
@BoltClock SE leggi attentamente, allora ho scritto "Classi statiche/metodi "e sono abbastanza sicuro che i metodi statici sono utili quando si implementa un modello Singleton ... – Yahia