2011-01-15 14 views
6

W tej próbki kodu:Co jest lepsze? private static vs prywatnej

public class SuperMan { 
    private static bool IsProper(decimal x) { 
     return x > 31.0m && x < 45.0m; 
    } 

    public bool CheckStuff(string a, string b, string c) { 
     // lots of code, some of which introduces a variable x 
     return IsProper(x) && /* other conditions */; 
    } 
} 

Should IsProper (..) będzie 'private static' lub 'prywatny'. Zakładając:

  1. IsProper (..) nie potrzebują dostępu do dowolnego stanu instancji
  2. Nie jesteśmy zaniepokojeni wydajność różnych między dwiema opcjami (jedna z rzeczy, które nigdy nie powinny (nawet w przyszłości). zrobić się domyślać o wydajności bez aktualnego pomiaru i optymalizacji bez konieczności.)
+3

Może przyszłe wersje 'IsProper' dostęp stan instancji? – CodesInChaos

+0

Nie ... Będę edytować pytanie, aby było jasne. – kidoman

Odpowiedz

4

to mógłby być statyczne, gdyż nie wydają się mieć nic robić z klasą Superman, ani jego członków. Ale powinieneś zadać sobie pytanie, czy ta funkcja w ogóle należy do tej klasy.

Jeśli sprawdzasz, czy dziesiętny jest prawidłową wartością dziesiętną dla SuperMan, to należy tam. Ale w tym przypadku nie stałbym się statyczny. Jest szansa, że ​​później będziesz musiał zastąpić te stałe wartości właściwościami SuperMan.

+1

To jest prywatne, więc można się tylko domyślać, że jest pomocnikiem. Jeśli ten sam kod jest używany w innym miejscu, należy on wówczas do klasy bazowej lub klasy pomocniczej. – leppie

+0

Jest to funkcja pomocnicza. – kidoman

+1

Dostarczone przez firmę Microsoft narzędzie do analizy kodu podaje to jako niepożądane; jeśli metoda nie używa żadnych pól instancji, powinna być statyczna. Nie rozumiem, na czym polega trudność, jeśli wystąpi taka potrzeba (raczej niż przedwcześnie). – Timwi

0

Metody statyczne mogą być nieco szybsze, ale z drugiej strony czasami może być trudniej je naprawić.

+0

Jak to zrobić? Czy możesz podać nam przykład. – kidoman

+0

@ KiD0M4N, Raf ma rację, statyczne jest szybsze, ponieważ nie ma potrzeby tworzenia statycznego, ale powinieneś używać statycznej metody na niezmiennych obiektach lub warunkach bezpaństwowych, aby zapobiec niepożądanym efektom. –

+0

Jeśli chcesz utworzyć obiekt tylko w celu wywołania metody, to prawda, ale jeśli już masz instancję, różnica w wydajności jest zaniedbywalna. Istnieje, ale nie musisz się tym martwić, chyba że piszesz jakiś najlepszy silnik renderujący 4D. – GolezTrol

2

Powody aby IsProper człon przykład:

  • IsProper potrzebuje kolejną realizację w dziedziczonej klasie
  • IsProper może potrzebować dostępu do członków w przyszłości

Powody aby IsProper statycznym członek:

  • Masz małą karę wykonania za wykonanie t członek instancji.
  • Jeśli tylko trzeba utworzyć instancję klasy zadzwonić IsProper, byś zrobić to statyczne
Powiązane problemy