2013-07-26 14 views
22

To może wydawać się głupie pytanie, ale to tylko ze względu na ciekawość.Delegaci kontra działania, Func in C#

Mamy dwa szczególne już zdefiniowane delegatów w C#:

Action obudowuje każdy "void" metoda że bierze 0 lub więcej parametrów.
Func enkapsuluje dowolną metodę, która zwraca określony typ wartości i przyjmuje 0 lub więcej parametrów.

Moje pytanie brzmi: w jakich przypadkach zaleca się zdefiniowanie niestandardowego uczestnika?
Dlaczego miałbyś to zrobić?

góry dzięki

+0

Delegaci byli tam przed Func i Action i pod wieloma względami służą jako urządzenia kompatybilności wstecznej. Istnieją jednak sytuacje, kiedy nie można się obejść, ale utwórz swojego delegata. –

+1

Zobacz http://www.youtube.com/watch?v=8o0O-vBS8W0 Może być przydatny. – RahulD

Odpowiedz

38

Żaden z Func lub Action typów pozwalają out lub ref parametry, więc będziesz musiał zdefiniować własne delegatów jeśli trzeba użyć tych np

public delegate bool TryParse<T>(string s, out T value); 
+1

To jest całkiem logiczne. Nie wiem, czy to była intencja, ale uświadomiłeś mi, że Action i Func również nie pozwalają na parametry typu.
Wielkie dzięki! – anfri

+0

Masz dwa typy zwrotu w swoim uczestniku. Myślę, że chodziło Ci o: delegata publicznego ** bool ** TryParse (string s, out T value); Chciałbym móc go edytować, ale nadal obowiązuje zasada 6 znaków. – user886079

+0

@ user886079 - Tak, miałem na myśli 'bool', dzięki. – Lee

2

W Tysiące przypadków będzie trzeba wskazać/wskazać funkcję (stąd delegat, jeśli rzeczywista implementacja funkcji będzie się różnić w czasie wykonywania, z wyjątkiem podpisu), która nie pasuje do żadnego z podanych delegatów. Powiedz

Delegat publiczny T MyDel (T t, U u, V v);

+0

Masz absolutną rację. Dzięki! – anfri