2010-07-14 24 views
7

Ho una domanda generale ... quando dovrei usare classi statiche o metodi statici? .. Conosco l'idea che i metodi statici possono essere chiamati senza istanziazione ... e le classi statiche dovrebbero essere utilizzate solo per metodi statici? ... ma ci sono anche problemi di prestazioni con esso ... e quando dovrebbero essere preferiti rispetto ai metodi e alle classi di istanza? .. Se qualcuno potesse semplicemente menzionare brevemente quando dovrei scegliere di usarli e quando dovrei evitarli?Quando utilizzare classi e metodi statici?

risposta

1

Ci è una voce precedente qui sembra: When to use static classes in C#

I would t Le classi statiche hink sono per contenere funzioni o dati che si desidera chiamare senza dover creare un oggetto per esso. Se ricordo, l'istanziazione di un oggetto la pone in memoria. E implicitamente, una classe statica non dell'oggetto non va in memoria? Sono passato un po 'da quando ho seguito i miei corsi di teoria (Mi dispiace

+0

Un costruttore statico viene chiamato solo una volta, e una classe statica rimane nella memoria per tutta la durata del dominio applicativo in cui il vostro programma risiede. - http://msdn.microsoft.com/en-us/library/79b3xss3.aspx –

0

Penso che una regola generale potrebbe essere che le funzioni di utilità dovrebbero essere statiche.Un esempio tipico sarebbe come in qualsiasi linguaggio di classe una classe Math conterrebbe metodi statici come sqrt(), poiché non c'è davvero bisogno di avere qualcosa come un oggetto Math separato

Come per le classi statiche si dovrebbe pensare alle classi mantenendo una forma di stato, tipicamente come le informazioni di sessione, che è necessaria indipendentemente dal percorso esatto percorso attraverso la vostra applicazione, e di cui in genere ne avete bisogno esattamente uno (pensate al vostro browser, probabilmente mantenendo sempre esattamente 1 classe di cookie-jar)

Le variabili statiche sono il gemello meno malvagio delle variabili globali (mantengono il loro valore, ma con il loro ambito limitato a una funzione), che sono in genere utili per mantenere una qualche forma di stato (ad es. caching dei dati) o per enumerare le cose che dovrebbero essere unico, ma la cui numerazione non è molto importante al di fuori della portata della vostra funzione o l'applicazione (ad esempio, la numerazione degli errori o profiling grida dal proprio debug ("..") funzioni o profilo())

Fondamentalmente, usarne solo uno quando si è sicuri che facendo le cose il "giusto" modo OOP potrebbe portare alla creazione di un mostro.

0

Come ho capito, è quando non ha senso creare un oggetto di una classe per invocare un'azione o quella classe è comune all'interno dell'applicazione. Ad esempio, in C#, la classe Console è sigillata (quindi non è possibile creare un oggetto ed ereditarlo, e non ha proprio senso farlo). Ma i professionisti ti spiegheranno meglio, comunque.

4

Una cosa da tenere a mente è le implicazioni di test dei metodi statici. Un metodo statico "sigilla" molto seams. Le giunzioni sono dove è possibile modificare il comportamento senza modificare il codice di produzione; gli esempi sono sottoclassi o collegamenti a una libreria di test. Poiché i metodi statici vengono risolti in fase di compilazione e non sono vincolati dinamicamente, non è possibile inserire un oggetto di test e modificare il comportamento di un metodo statico. Provare quella lezione sarà un problema.

per le cose come le funzioni matematiche si può essere abbastanza sicuro che un metodo statico sarà ok, ma quasi certamente non si vuole un metodo statico che si connette a un database. Pensa a come testare il codice che utilizza un metodo statico che stai pensando di creare.

Ecco un buon collegamento dalla sperimentazione blog di Google: Static Methods are Death to Testability

+0

Post fantastico - I love my love Miško Hevery. Hai visto i suoi Tech Talk di Google? (Credo che fosse la conferenza dal titolo "The Clean Codice Talks - Unit Testing"., Anche se tutti i suoi discorsi sono vale la pena) Questi colloqui innescato un momento supernova cognitivo mente sconvolgente per me, fondendo CIO e TDD in una sorta di arma epica mega. –

+0

"Un metodo statico" sigilla "un sacco di cuciture". non importante per i metodi di basso livello, ma importatn per i metodi di livello superiore. – Raedwald