Metody statyczne bywają mylące

Metodę statyczną można wywołać nie tylko przy pomocy notacji dwukropkowej, tj

   Klasa::Metoda(...);

ale także na bazie dowolnego obiektu tej klasy:

   Klasa k;
   // ...
   k.Metoda(...);

Bywa to niekiedy mylące. W implementacji klasy enkapsulującej informacje na temat daty - niech się nazywa OurDate - wystąpiły między innymi metoda void SetJulian(long d) (modyfikująca datę by wskazywała zadany dzień juliański) oraz metoda statyczna static OurDate Julian(long d) tworząca i zwracająca odpowiednio zainicjowany nowy obiekt (metoda statyczna wykorzystywana jako obejście w sytuacji, gdy konstruktora już nijak nie dawało się przeciążyć).

Jeden z kolegów pisał:

   OurDate d;
   d.Julian(...);

i ... dziwił się, że d nie jest modyfikowane. Bo faktycznie, wyrażenie było już zbyt skomplikowane by kompilator ostrzegł, że nie ma ono znaczenia - a zignorowanie wyniku jest w pełni poprawne.

Nie pisałbym o tym (sprawa jest dość oczywista), gdyby nie fakt, że by to zauważyć musiałem wpatrywać się w odpowiedni fragment kodu całkiem długo.

Osobiście rekomenduję, by dla metod statycznych zawsze stosować notację dwukropkową.

komentarze obsługiwane przez Disqus