2011-01-21 10 views
5

Ho una funzione membro che non dipende da alcuna variabile membro della classe. (nel mio caso la classe è una pagina ASP.Net)È meglio utilizzare le funzioni statiche se non sono necessari membri della classe?

La funzione è protetta, non ne ho bisogno al di fuori di questa classe. Il suo unico scopo è creare un URL da un dato oggetto.

Devo rendere statiche tutte le mie funzioni se non dipendono dalla classe, anche se non vengono utilizzate al di fuori di questa classe? C'è qualche motivo come prestazioni o manutenibilità per farlo?

risposta

5

È consigliabile eseguire funzioni che non interagiscono con i dati dei membri statici. Semplicemente aiuta a descrivere come la funzione interagisce con il suo ambiente. Tuttavia, non dovrebbero esserci problemi di prestazioni.

+2

C'è un piccolo problema di prestazioni (non è nascosto questo parametro) ma questo non dovrebbe essere il fattore decisivo. L'intenzione (il tuo primo punto) è più importante. –

+0

@Henk Holterman: Certo, ma si tratta di un problema di prestazioni molto piccolo. Se è una funzione di protezione statica, probabilmente è un tipo di funzione di supporto, quindi è già passato e/o restituito anche i dati. –

1

Non posso dire di conoscerne abbastanza bene, ma ho sentito che è una buona idea renderlo statico se non dipende dai membri della classe. Di solito ti dà il vantaggio di non dover sprecare un'allocazione nel caso in cui hai solo bisogno di quel metodo, ma dal momento che è solo all'interno della classe per te, probabilmente stai già lavorando con un'istanza del tuo oggetto. Lo renderei statico, ma nel tuo caso non so se c'è molta differenza (dal punto di vista del codice).

1

Se si esegue il metodo statico, non è necessario creare un'istanza di classe per utilizzarlo. Questo sarà più veloce. Inoltre, se la sua staticità lo trovo, rende il codice un po 'più breve.

Non penso che ci siano problemi di prestazioni con l'elettricità statica, semmai più veloce. Basti pensare a tutti i metodi di estensione che sono apparsi nelle versioni più recenti di .net. sono tutti statici!

6

Probabilmente, ma farei un ulteriore passo avanti.

In queste situazioni è davvero necessario chiedersi se il metodo appartiene ancora al tipo. Se questo metodo non ha alcuna dipendenza dai dati del tipo, perché fa parte di quel tipo? Esiste un tipo migliore o più appropriato? Ne hai molti di questi, forse sparsi tra pochi tipi diversi, che potrebbero essere raggruppati logicamente?

0

Dipende in realtà. Se il tuo metodo utilizza o meno dati di istanza è un dettaglio di implementazione di questo metodo. Se è privato, puoi renderlo statico se vuoi. Tuttavia, se può essere visibile al di fuori della classe (ad es. È un metodo protetto) è necessario pensare prima all'interfaccia e renderla statica solo se non avrebbe mai senso per questo metodo accedere ai dati dell'oggetto.

Problemi correlati