Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Správně použití private static metod

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
roman.labovsky:6.3.2018 13:41

Ahoj,

chtěl jsem se zeptat, kdy a proč použít private static metody? Prý by to mělo zpřehlednit, že daná metoda nepoužívá instanční proměnné, trocha zvýšení rychlosti. Děkuji za odpověď.

 
Odpovědět
6.3.2018 13:41
Avatar
Odpovídá na roman.labovsky
Erik Šťastný:6.3.2018 14:28

Přesně jak říkáš, daná metoda je nezávislá na instanci.

Asi nejjednodušší příklad je parsování, např statická metoda

public static int Parse(
        string s
)

Rozhodně nestojíš o to muset vytvářet nějaký int proto aby jsi mohl tuto metodu použít, ale metoda je ve třídě Int32, protože s ní zkrátka má blízkou souvislost.

O vlivu na rychlost netuším, možná tak když to porovnáš s tím, že by jsi musel instanci vytvořit vs nevytvořit tak ano, ale jinak asi těžko.

 
Nahoru Odpovědět
6.3.2018 14:28
Avatar
Odpovídá na roman.labovsky
Erik Šťastný:6.3.2018 14:32

Promiň přehlédl jsem private ... bohužel komentář klasicky už nejde upravit.

 
Nahoru Odpovědět
6.3.2018 14:32
Avatar
Odpovídá na Erik Šťastný
Erik Šťastný:6.3.2018 14:37

A k tomu výkonu, jde o to, že do statických metod nemusí program dávat instanci jako parametr, pořád dokola, v C# to nejde moc vidět, ale například v Pythonu, má každá instanční metoda na prvním místě parametr self (this), jen v C# je to hádám skryté :)

 
Nahoru Odpovědět
6.3.2018 14:37
Avatar
Odpovídá na Erik Šťastný
Marian Benčat:6.3.2018 14:53

Eh.. takto fungují téměř všechny rozumné jazyky (asi proto ne v Pythonu).

Kromě toho, všechny tyto jazyky používají většinou tzv. fastcall, což znamená, že většinou první dva parametry předává přeš registry CPU.. takže "ukazatel" na instanci, jde přes registr vždy = nemá to reálně žádný dopad.

Nahoru Odpovědět
6.3.2018 14:53
Totalitní admini..
Avatar
Odpovídá na Marian Benčat
Erik Šťastný:6.3.2018 14:57

Nějak nechápu první větu, napsal jsem, že v Pythonu to jde krásně vidět, ale že v C# je to skryté, jak s tím souvisí, to co jsi napsal? :-O

 
Nahoru Odpovědět
6.3.2018 14:57
Avatar
Odpovídá na Erik Šťastný
Marian Benčat:6.3.2018 15:10

No, napsal jsem svůj osobní názor na Python a pak ti reagoval na dopad na výkon toho, když to není statická metoda :-)

"A k tomu výkonu, jde o to, že do statických metod nemusí program dávat instanci jako parametr,"

Nahoru Odpovědět
6.3.2018 15:10
Totalitní admini..
Avatar
Odpovídá na Marian Benčat
Erik Šťastný:6.3.2018 15:15

Ahaa, no já se tady dočetl, že to vliv asi nějaký malý má.

https://stackoverflow.com/…atic-methods

 
Nahoru Odpovědět
6.3.2018 15:15
Avatar
Odpovídá na Erik Šťastný
Marian Benčat:6.3.2018 16:00

Jop.... statické metody jsou by default non-virtual, takže tam není indirection přes vtable.

Mimochodem, k tomu, že se vše kromě statiky volá přes callvirt, se vztahuje takový hezký příběh, defakto čtvrtstoletí starý :-)

Nahoru Odpovědět
6.3.2018 16:00
Totalitní admini..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.