2011-01-21 9 views
5

Mam funkcję składową, która nie zależy od zmiennych członkowskich klasy. (w moim przypadku klasa to strona ASP.Net)Czy lepiej używać funkcji statycznych, jeśli nie są potrzebni członkowie klasy?

Funkcja jest chroniona, nie potrzebuję jej poza tą klasą. Jego jedynym celem jest zbudowanie adresu URL z danego obiektu.

Czy mam sprawić, aby wszystkie moje funkcje były statyczne, jeśli nie zależą od klasy, nawet jeśli nie są używane poza tą klasą? Czy są jakieś powody, takie jak wydajność lub łatwość konserwacji?

Odpowiedz

5

Dobrze jest wykonywać funkcje, które nie współdziałają z danymi elementu statycznie. Pomaga tylko opisać, w jaki sposób funkcja współdziała z otoczeniem. Jednak nie powinno być problemów z wydajnością.

+2

Występuje mały problem z wydajnością (brak ukrytego tego parametru), ale nie powinno to być decydującym czynnikiem. Intencja (twój pierwszy punkt) jest ważniejsza. –

+0

@ Henk Holterman: Oczywiście, ale jest to bardzo mały problem z wydajnością. Jeśli jest to funkcja statycznie chroniona, to prawdopodobnie jest to jakiś typ funkcji pomocniczej, a zatem już jest on przekazywany i/lub zwracany. –

1

Nie mogę powiedzieć, że wiem wystarczająco dużo o występie, ale słyszałem, że dobrze jest zrobić to statycznie, jeśli nie zależy od członków klasy. Zwykle daje to korzyści polegające na tym, że nie musisz marnować przydziałów, na wypadek gdybyś potrzebował tej metody, ale ponieważ jest to tylko klasa dla ciebie, prawdopodobnie pracujesz już z instancją twojego obiektu. Uczyniłbym to statycznie, ale w twoim przypadku nie wiem, czy jest duża różnica (z perspektywy kodowania).

1

Jeśli utworzysz metodę statyczną, nie będziesz potrzebował tworzyć instancji klasy, aby z niej skorzystać. To będzie szybsze. Ponadto, jeśli jego statyczny odczyt spowoduje, że kod będzie trochę krótszy.

Nie sądzę, że są jakieś problemy z wydajnością ze statycznym, jeśli cokolwiek jest szybsze. Po prostu pomyśl o wszystkich metodach rozszerzenia, które pojawiły się w nowszych wersjach .net. wszystkie są statyczne!

6

Prawdopodobnie, ale zrobiłbym o krok dalej.

W takich sytuacjach na prawdę chcesz zadać sobie pytanie, czy metoda nadal należy do typu. Jeśli ta metoda nie ma zależności od danych typu, dlaczego jest częścią tego typu? Czy istnieje lepszy lub bardziej odpowiedni typ? Czy masz kilka z nich, być może rozproszonych pośród kilku różnych typów, które można logicznie pogrupować?

0

To zależy od rzeczywistości. To, czy twoja metoda używa jakichkolwiek danych instancji, czy nie, jest szczegółem implementacji tej metody. Jeśli jest prywatny, możesz go ustawić statycznie, jeśli chcesz. Jeśli jednak może być widoczny poza twoją klasą (np. Jest to metoda chroniona), powinieneś najpierw pomyśleć o interfejsie i uczynić go statycznym tylko wtedy, gdy nie ma sensu, aby ta metoda miała dostęp do danych obiektu.

Powiązane problemy