2009-06-03 41 views

Odpowiedz

17

Nie ma różnicy. Przyczyna ich istnienia jest historyczna. Converter<T1,T2> był już dostępny w .NET 2.0, ale później dodano całą gamę typów delegatów Func<>. W celu zachowania spójności dodano Func<T,TResult>, ale zrobiono to samo, co Converter<T1,T2>.

+0

Przyznano ci prawidłową odpowiedź, ponieważ jesteś najszybszym strzelcem na zachodzie :) –

6

Converter<,> został dodany w .NET 2.0. Różne Func s zostały dodane w 3.5 (myślę). Teraz, pewnie, projektanci frameworków mogliby: powiedzieć: "Hej, już mamy tego generycznego delegata", ale wyglądałoby to bardzo dziwnie, gdybyśmy mieli wszystkie inne Func s, a nie to. Aby uniknąć zmiany, należy pozostawić ją na swoim miejscu.

8

Istnieje wiele typów delegatów, które są effictively samo - na przykład:

  • ThreadStart
  • MethodInvoker
  • Action

wszystkie mają taką samą void Foo() podpis. Historycznie, nazwy zostały wybrane przez konkretne zastosowanie; ale z LINQ i patrząc do przodu, wydaje się jaśniejsze skupić się na podpisanie - stąd w .NET 3.5 wprowadzono takie rzeczy Func<...> i Action<...> (rodzin delegatów)

Niestety, nie są one naprawdę kompatybilny wariancji poziom, więc jeśli używasz obu, często będziesz musiał między nimi przesuwać. To jest ból ...

Powiązane problemy