Metody statyczne są dużo szybsze i zużywają o wiele mniej pamięci. Istnieje takie błędne przekonanie, że jest tylko trochę szybszy. Jest trochę szybszy, o ile nie włożysz go w pętle. BTW, niektóre pętle wyglądają na małe, ale tak naprawdę nie są, ponieważ wywołanie metody zawierające pętlę jest również inną pętlą. Możesz odróżnić kod, który wykonuje funkcje renderowania. Dużo mniej pamięci jest niestety prawdziwe w wielu przypadkach. Instancja umożliwia łatwe udostępnianie informacji za pomocą metod siostrzanych. Statyczna metoda poprosi o informację, kiedy jej potrzebuje.
Ale jak w prowadzeniu samochodów, prędkość przynosi odpowiedzialność. Metody statyczne mają zwykle więcej parametrów niż ich odpowiednik. Ponieważ instancja zajmie buforowanie współdzielonych zmiennych, metody instancji będą wyglądać ładniej.
ShapeUtils.DrawCircle(stroke, pen, origin, radius);
ShapeUtils.DrawSquare(stroke, pen, x, y, width, length);
VS
ShapeUtils utils = new ShapeUtils(stroke,pen);
util.DrawCircle(origin,radius);
util.DrawSquare(x,y,width,length);
W tym przypadku, gdy zmienne instancji są używane przez wszystkich metod większość czasu, metody instancji są bardzo warto. Instancje NIE SĄ O PAŃSTWIE, chodzi o UDOSTĘPNIANIE, chociaż WSPÓLNY STAN jest naturalną formą UDZIAŁU, NIE JEST TAKIE SAME. Ogólna zasada jest taka: jeśli metoda jest ściśle powiązana z innymi metodami - kochają się nawzajem tak bardzo, że gdy jeden jest nazywany, drugi też musi być nazywany i prawdopodobnie dzieli on tę samą filiżankę wody - -, powinna być wykonana instancja. Tłumaczenie metod statycznych na metody instancji nie jest takie trudne. Musisz tylko wziąć wspólne parametry i umieścić je jako zmienne instancji. Odwrotnie jest trudniej.
Lub możesz utworzyć klasę proxy, która będzie mostem statycznych metod. Choć teoretycznie może się to wydawać mniej efektywne, praktyka opowiada inną historię. Dzieje się tak dlatego, że gdy chcesz raz wywołać DrawSquare (lub w pętli), przejdziesz od razu do metody statycznej. Ale kiedy będziesz go używać w kółko wraz z DrawCircle, użyjesz proxy instancji. Przykładem są klasy System.IO FileInfo (instancja) a plik (statyczne).
Metody statyczne można przetestować. W rzeczywistości nawet więcej testowalne niż instancja raz. Metoda GetSum (x, y) byłaby bardzo testowalna nie tylko testem jednostkowym, ale testem obciążeniowym, zintegrowanym testem i testem użycia. Metody instancji są dobre dla testów jednostek, ale straszne dla każdego innego testu (co jest ważniejsze niż testy jednostek BTW), dlatego mamy tak wiele błędów w tych dniach. Rzeczą, która sprawia, że WSZYSTKIE metody są niepoprawne, są parametry, które nie mają sensu (np. Sender, EventArgs e) lub stan globalny, taki jak DateTime.Now. W rzeczywistości statyczne metody są tak dobre w testowalności, że widzisz mniej błędów w kodzie C nowej dystrybucji Linuksa niż przeciętny programista OO (jest on pełen s *** Wiem).
myślę, że to powinno być przeniesione do CS.SE –