Skip to: Site menu | Main content

Autor

Chłopak z Bałut (Dołów), po uniwerku i stypendium. Wiecznie zestresowane, przemądrzałe bezguście. Więcej na stronie domowej.

Delegaty w C#

Czepianie, Klepanie

Delegaty jako element języka C# zawsze wydawały mi się niewygodne w użyciu. Nie jestem w stanie zrozumieć logiki ich podwójnej deklaracji:

    public delegate TOutput Converter<TInput,TOutput> (TInput input);
    public List<TOutput> ConvertAll<TOutput> (Converter<T,TOutput> converter)

Tak, jakby TOutput converter<T,TOutput>(T element) nie było dobrym argumentem dla ConvertAll.

I musze zmartwić panów projektantów z Microsoftu (choć tego nie czytają, więc ich raczej nie obejdzie), że syntax highlighting w Visual Studio niewiele pomaga - deklaracja delegatu zawsze będzie mi się mylić z deklaracjami zmiennych i (jako osobie przyzwyczajonej do wskaźników do funkcji z C oraz do deklaratorów z Nemerle) zawsze będzie mi to wadzić (o słabiutkiej inferencji typów w C# w ogóle nie chcę wspominać).

Kolejnym problemem delegatów w wydaniu Microsoftu jest niekompletna dokumentacja. To znaczy - informuje ona programistów, jak z nich korzystać, ale w przeciwieństwie do innych klas, brak jest odnośnika Members, a do hierarchii typów trzeba się dobierać z innej strony. W tej sytuacji, w charakterze dokumentacji korzystam z pary: kompilator-dissassembler oraz Reflectora (np. kompilator C# nie używa żadnego z konstruktorów klasy Converter'2, który byłby odziedziczony z którejś z nadrzędnych klas).

Cała ta gimnastyka przypomina mi trochę czasy implementowania obsługi SMTP albo POP3 - najpierw czytałem RFC, a potem obserwowałem co robią inne programy pocztowe. A ponieważ inne programy nie były zgodne z RFC, to dla dobra użytkownika ja również nie byłem.

07 października 2006, 13:57:20

Komentarze

Khorne, 07 października 2006, 14:11:20

Nemerle? Wygladalo ciekawie, dopoki nie obejrzalem z bliska. Poczwarnie powolne, a lista ficzerow wyglada jak nieprzemyslany zlepek bez wspolnego mianownika.

Zostaje przy C++.

rzyjontko, 07 października 2006, 14:24:39

Nemerle zdecydowanie nie jest językiem programowania, którym można by było zastąpić C#. Brak "porządnego" wsparcia ze strony popularnych IDE, niepewna przyszłość samego języka i jego kompilatora to moje podstawowe zarzuty.

Ale za to powinni mieć również płacone ludzie w zespole C#, żeby przyglądać się przeróżnym trendom, w różnych językach (również tych, które nie mają tylu użytkowników co Java) i inkorporować najciekawsze ich elementy. Przecież delegaty nie zostały wprowadzone do języka "ot tak", tylko po debatach na temat ich składni. Szkoda, że nie skorzystali z lepszych rozwiązań.

Treść komentarza można formatować zgodnie ze składnią Textile.
Odpowiedzi śledzić można przy pomocy RSS RSS .