È piuttosto scomodo dover creare una nuova istanza di una classe solo per chiamare il metodo. Ma ecco come lo fanno adesso
Sono ridicoli, per essere schietti.
Come indicato da commenter Groo, al livello di compilazione nativo, un metodo di istanza non è nemmeno molto diverso da un metodo statico. È solo che è stato passato un parametro implicito al metodo di istanza, mentre con il metodo statico "ciò che vedi è ciò che ottieni".
Il runtime può ottimizzare l'accesso a un metodo. Potrebbe non compilare JIT il metodo fino alla prima esecuzione. Potrebbe anche non caricare l'IL dall'assembly in memoria fino a quando l'IL non è effettivamente necessario. Ma può eseguire queste ottimizzazioni con metodi statici e di istanza ugualmente bene.
In effetti, forzare tutti i metodi a essere metodi di istanza è peggiore di rispetto all'utilizzo del metodo statico, perché significa che per alcuni metodi, uno sta creando arbitrariamente un oggetto altrimenti inutile. Mentre il runtime può essere in grado di rilevare il riferimento all'oggetto non utilizzato e quindi farlo avere una durata minima, non può evitare di allocare del tutto l'oggetto, anche un oggetto degenerato occuperà parte della memoria mentre è vivo, e aggiungerà al costo della raccolta dei rifiuti.
E oltre a tutto ciò, supponiamo per un momento che i vostri colleghi abbiano ragione. Cosa avresti guadagnato? Qualche differenza di prestazioni misurabile? Dubbioso. Ammettiamolo: il codice gestito, e in particolare C#, ha il potenziale per nascondere qualsiasi numero di dettagli di implementazione privi di prestazioni da noi. Il motivo principale per cui utilizziamo un linguaggio di codice gestito come C# è che otteniamo così tanto in termini di produttività e correttezza del codice, che queste possibili inefficienze valgono la pena. Il più delle volte, e in particolare sui computer moderni, sono praticamente invisibili.
Come spesso accade, i vostri colleghi sono non corretta, e non è in alcun modo utile per fare in metodi di istanza, i metodi che altrimenti potrebbero essere metodi statici. Ma anche se così non fosse, dedicare del tempo a scrivere codice offuscato e inespresso per evitare un costo di prestazione non misurato e non dimostrato è uno spreco.(E so che nessuno si è preoccupato di confrontare le reali differenze di rendimento, perché se lo avessero fatto, non avrebbero trovato alcun miglioramento nelle prestazioni eliminando tutti i metodi statici).
http://programmers.stackexchange.com/questions/161222/dont-use-static-in-c – Irshad
E questo; http://stackoverflow.com/questions/12279438/performance-of-static-methods-vs-instance-methods – Irshad
_ "La mia intera squadra di sviluppo pensa che i metodi statici siano una cosa terribile da usare" _ - Immagino che vadano bene di cose utili come 'String.Compare()' troppo? – MickyD