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
penso che le due seguenti link offrono una risposta chiara per quello che stai cercando. Date un'occhiata a loro:
Per le classi statiche:
When to Use Static Classes in C#
Per i metodi statici:
When is it appropriate to use static methods? (Jon Skeet [Guru] rispose questo: o))
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
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.
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.
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
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. –
"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
- 1. Quando e perché utilizzare classi/metodi astratti?
- 2. Metodi statici su classi generiche?
- 3. Metodi statici: quando e quando no
- 4. PHP: quando utilizzare i tratti e quando utilizzare i metodi statici?
- 5. in PHP, quando dovrei usare metodi statici o classi astratte?
- 6. Quando dovrei usare metodi statici?
- 7. Classi C# - Perché tanti metodi statici?
- 8. Completamento automatico di Eclipse con classi generiche e metodi statici
- 9. Inizializzatori statici e metodi statici in Java
- 10. Quando utilizzare Proprietà e metodi?
- 11. Quando dovrei usare metodi pubblici/privati / statici?
- 12. Quando si dovrebbero usare metodi statici pubblici
- 13. classi Java e blocchi statici
- 14. Generici Java, singleton e metodi statici
- 15. metodi statici e test di unità
- 16. Metodi statici in PHP
- 17. Java - Metodi statici generici
- 18. Metodi statici Python, perché?
- 19. Metodi statici simulati da più classi usando PowerMock
- 20. Vantaggi delle classi con solo metodi statici in C++
- 21. Come gestisco le classi con metodi statici con Ninject?
- 22. PHPUnit Mock oggetti e metodi statici
- 23. Proprietà e metodi di ereditarietà e metodi statici
- 24. Come aggiungere metodi statici alle classi Java in Kotlin
- 25. F # Metodi statici privati
- 26. Accedere alla proprietà statica tramite metodi statici e non statici?
- 27. Metodi statici nell'interfaccia java
- 28. Metodi statici e di istanza in Python
- 29. filettatura e statici metodi in C#
- 30. metodi di estensione statici
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 –