2011-06-28 9 views
8

Generic Func <> i Action <> delegaci z późniejszych wersji .NET są bardzo atrakcyjni, a w wielu miejscach wykazano, że można je łatwo odtworzyć w celu kierowania na kod .NET 2.0, taki jak here.C# Func <> delegaci w bibliotece

Jednak z perspektywy biblioteki docelowej .NET 2.0, która może być wykorzystywana przez aplikacje zbudowane na podstawie wyższej wersji .NET, w jaki sposób to się kumuluje. Czy wdrażanie tej "warstwy kompatybilności" w bibliotece jest absolutnie receptą na konflikt (zarówno pod względem interfejsu prywatnego, jak i publicznego), czy też istnieją sposoby, aby uczynić tę pracę niezależną od docelowej struktury, której używa aplikacja konsumująca?

Jeśli to nie jest rozrusznik, czy byłoby lepiej: A) Zdefiniować identyczny zestaw sparametryzowanych uczestników o różnych nazwach? lub .. B) Trzymaj się ściśle z konwencją .NET 2.0 i określ nowe typy uczestników, które są im potrzebne?

+5

Jeśli tworzysz bibliotekę targetowania .NET 2.0, spróbuj użyć istniejących delegatów w ramach, jeśli to możliwe.W przeciwnym razie utwórz własne, ale _nież_nie pod żadnym pozorem nie nazwij ich ani nie utworzę delegatów "ogólnego przeznaczenia" do odzwierciedlenia delegatów, które znajdziesz w .NET 3.0 i nowszych. Doprowadziłoby to tylko do zamieszania. Warstwy kompatybilności są niepotrzebne, ponieważ kompatybilni delegaci mogą się ze sobą wymieniać. –

Odpowiedz

6

Równina prawdą jest, że Func<> i Action<>dobry pomysł. Sprawiają, że twój kod jest znacznie łatwiejszy w czytaniu i unika szokującej ilości niechlujnych deklaracji delegatów. Dlatego chcesz z nich korzystać.

Więc masz naprawdę atrakcyjny styl programowania, którego chcesz użyć, jest to standardowa technika, która jest teraz używana prawie wszędzie zamiast starej, ale nie możesz jej użyć, ponieważ kierujesz ją na starszą wersję frameworka . Co powinieneś zrobić?

Masz trzy możliwości:

  1. Wykorzystanie stylu programowania, który był w powszechnym użyciu przed funkcji
  2. dodać funkcję do własnego kodu w duchu, ale z bezkonfliktowe nazw
  3. Dodać funkcja do własnego kodu z "prawdziwymi" nazwami, ale we własnej przestrzeni nazw

Korzystanie ze starego stylu programowania rezygnuje z wszystkich korzyści, które doceniamy dzięki temu wyczynowi ure. To wielkie poświęcenie. Ale może wszyscy twoi współpracownicy są przyzwyczajeni do tego stylu programowania.

Korzystanie z funkcji o nazwach, które nie powodują konfliktu, wydaje się wystarczające. Ludzie będą mogli odczytać kod i korzystać z funkcji, ale nikt nie będzie mylić, że wydają się być czymś, czym nie są. Kiedy w końcu będziesz gotowy do aktualizacji, będziesz musiał załatać nazwiska. Na szczęście Ctrl + R, Ctrl + R czyni to bardzo łatwo.

Używanie funkcji o takich samych nazwach jak standardowa funkcja oznacza, że ​​Twój kod może być kierowany na starszą wersję, ale wydaje się, że korzysta z nowszych funkcji. Wydaje się, że wygrywasz/wygrywasz. Ale może to powodować zamieszanie i musisz uważać, aby twoje typy nie były narażone na inne nieświadome złożenia, prawdopodobnie powodując problemy z kompilacją na poziomie źródłowym. Musisz więc być ostrożnym i dokładnie wiedzieć, co się dzieje. Ale może działać skutecznie.

Musisz wybrać podejście, które ma sens w Twojej sytuacji, w zależności od Twoich potrzeb. Nie ma jednej słusznej odpowiedzi dla wszystkich, tylko kompromisy.

+0

Z braku innych odpowiedzi mówiących inaczej, założę się, że nie ma sprytnego rozwiązania tego problemu. Chociaż te kompromisy już zasiadają w tyle mojej głowy, jest to dobrze uzasadniona odpowiedź. –

Powiązane problemy