Myślisz, że zarabiasz tyle, na ile zasługujesz? Zapraszamy do wzięcia udziału w anonimowej ankiecie.
3

Piszę klasę, która dla swoich celów używa pewne prywatne metody, które nie odwołują się do instancji obiektu (this w C#). Mam do wyboru dwie możliwości:

  1. Pozostawić metody dynamicznymi mimo wszystko.
  2. Przekształcić metody na statyczne.

Osobiście jest mi wszystko jedno. Mam jednak pytanie: czy pod względem wydajności jest różnica pomiędzy tymi rozwiązaniami? Które rozwiązanie jest lepsze?

flag

4 Answers

1

Jak można wyczytać tutaj, nie ma wielkiej różnicy pomiędzy wywołaniami metod statycznych a metod instancyjnych. Więc raczej kwestia gustu.

link|flag
2 
Technicznie rzecz ujmując, jest jedna różnica. Metoda instancji musi dostać jeszcze jeden niejawny parametr - this. Jednak to dopiero może mieć jakiś dostrzegalny wpływ na wydajność, jeśli wywołujemy metodę kilkadziesiąt milionów razy. – vigrid Jan 15 at 11:15
Otóż to, taka też jest wzmianka w tekscie, do którego podlinkowałem. – Kev Jan 15 at 11:35
2

Jeżeli twój kod (klasa) zawiera metody, które nie odwołują się do składników obiektu, a ich jedynym zadaniem jest dostarczanie pewnych funkcjonalności-narzędzi to oznacza, że twój kod źle pachnie (czytaj śmierdzi). Wmyśl zasady OCP (Open-Close Principle) należało by takie metody przenieść do osobnej klasy narzędziowej, tak by zmiana ich działania nie wymuszała zmian w oryginalnym kodzie. Jeżeli nie chcesz ujawniać klas narzędziowych to należy nadać im widoczność na internal w ramach danego namespace (przynajmniej tak nakazuje zdroworozsądkowe porównanie javowego default). Nie mieszaj kodu pomocniczego i właściwego.

link|flag
1

Ciekawi mnie jednakże, dlaczego CodeAnalysis z visualStudio zaleca w takim przypadku użycie statycznej metody - właśnie ze względu na wydajność.

link|flag
0

Ja w takiej styuacji wybrałbym metodę statyczną. Wystarczy mi wiedza, że referencja do takiej metody jest tylko w jednym miejscu dla wszystkich instacji danej klasy.

link|flag
Referencje do niewirtualnych metod są w jednym miejscu dla wszystkich instancji klasy. – vigrid Jan 15 at 11:03
Tak więc mój błąd, muszę się doszkolić :) – Grzegorz Wróblewski Jan 15 at 11:11
Nie przejmuj się, z wiedzą się jeszcze nikt nie urodził :) – vigrid Jan 15 at 11:19

Your Answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.