Równina prawdą jest, że Func<>
i Action<>
są 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:
- Wykorzystanie stylu programowania, który był w powszechnym użyciu przed funkcji
- dodać funkcję do własnego kodu w duchu, ale z bezkonfliktowe nazw
- 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.
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ć. –