Wpis z mikrobloga

#csharp #programowanie

Wołam @spetz , bo się zna ( ͡° ͜ʖ ͡°)

Problem mam następujący. Chcę mieć funkcję, która przyjmuje jako argument typy. Nie jest to żaden problem w C#, natomiast nie chce mi zatwierdzić tego gdy wpiszę samo Funcja (TypeName), musi być Funkcja(typeof(TypeName)). Da się to jakoś tak zrobić, żeby nie musieć pisać nic więcej niż sam typ?
  • 22
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@spetz: No właśnie problem w tym, że tak naprawdę to jest lista typów. Wszystkie te typy dziedziczą po jednej klasie i są jej wersją z nieco innymi parametrami. Więc konkretyzowanie jakiegoś szablonu nic mi tu nie uprości. Ta funkcja przyjmuje dowolną liczbę parametrów, więc może być równie dobrze:

Funkcja(typ1, typ2, typ3, typ4);

Natomiast ta funkcja jest właśnie między innymi od tego aby sobie te klasy po typach znaleźć, utworzyć ich instancje i
  • Odpowiedz
A nie chcę dawać stringów, bo utracę wtedy kontrolę nad typami - ktoś zrobi refactor i się wszystko posypie.


@Khaine: to użyj operatora nameof()
  • Odpowiedz
@Szab: Opisałem wyżej czemu mi to nic nie da ( ͡° ʖ̯ ͡°) To nie jest funkcja generic, ona ma przyjmować typy dziedziczące po jednym konkretnym typie (tak jak opisałem wyżej) - ale pisanie new Typ1() albo typeof(Typ1) to po prostu zbędne zaciemnianie kodu. Bo sama nazwa typu jest tutaj potrzebną informacją, nic więcej.

Najmniejszym złem jest używanie new Typ1() jak już. Ale idealnie by było
  • Odpowiedz
@Khaine: a może powiedz co chcesz zrobić? Bo to brzmi jakby było przekombinowane, może jest jakiś lepszy patern, żeby osiągnąć Twój cel? Generalnie C# jest językiem silnie typowanym i w 99% przypadków chcemy z tego korzystać.
  • Odpowiedz
@Yahoo_: dość spora - nameof generuje stringa. Ale generalnie po całym tym poście autor szuka dziury w całym i do tego jak użyje generyków to zrobi dużo mniej czytelny kod, tylko dlatego że mu się nie chce typeof napisać. Napisałby to 30 razy w czasie pisania tego posta
  • Odpowiedz
dość spora - nameof generuje stringa.

@piachu: no tym gorzej :D. typeof daje Ci typ, z którego możesz wyciągnąć stringa, ale też dużo innych rzeczy :).

Napisałby to 30 razy w czasie pisania tego posta


@piachu: kod piszesz raz, czytasz setki razy :)
  • Odpowiedz
@Khaine: dobra nie wiem, brzmi dziwnie. Dziwne jest posiadanie klasy per wymiar, kolor tła, czcionka ;).
Wracając do oryginalnego pytania jeżeli potrzebujesz tylko typu użyj typeof, jeśli potrzebujesz instancji, użyj instancji. Niech Twoja metoda precyzyjnie mówi jakie typu argumenty są jej porzebne.
  • Odpowiedz
Dziwne jest posiadanie klasy per wymiar, kolor tła, czcionka ;).


@Yahoo_: Wiem, ale alternatywą są instancje - a wtedy musisz robić jakieś presety tak czy inaczej, więc już lepiej mieć to jako osobny typ.
  • Odpowiedz