Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 20054|Odpowiedź: 0

[Źródło] Szybko zrozum zaawansowane koncepcje C# (1) delegowanie delegacji

[Skopiuj link]
Opublikowano 19.01.2017 15:18:00 | | | |
Od dawna zajmuję się tworzeniem .NET i niedawno recenzowałem książkę "C# Advanced Programming". Zauważyłem, że wiele problemów, które kiedyś rozumiałem, ale nie rozumiałem, można powoli badać i rozumieć.

Dlatego planuję zacząć pisać wpis na blogu o "Serii Zaawansowanego Programowania w C#". Będzie czerpać z koncepcji książki "C# Advanced Programming" i odnieść się do wpisów na blogach innych ekspertów, mam nadzieję, że rozumiesz. Jeśli coś jest nie tak, proszę to poprawić.

(Ponadto: Ten wpis na blogu nie wyjaśni podstaw definicji i gramatyki.) )



Porozmawiajmy o mianowaniu do służby.

Delegate jest szeroko używany w .NET. Zaangażowane będą wyrażenia lambda, wydarzenia, metody anonimowości itp. (śledźcie kolejne wpisy na blogu).

Czym więc jest powierzenie?

W prostych terminach delegati nie różnią się od metod określających tylko to, że muszą podać słowo kluczowe delegata i nie posiadają jednostki metody. Możesz myśleć o tym jak o tymczasowym zastępstwie, na przykład, gdy piszesz kod nie wiedząc, z czym będziesz się mierzyć. Musisz tylko znać typ parametrów i typ wyjścia, które zamierzasz wprowadzić, i je zdefiniować. To metoda przedstawiona w książce, że podpis musi oznaczać to samo.

Zdefiniujmy podstawową delegację:





Wyniki realizacji:
Czy widzisz powyższe praktyczne miejsce do zaufania? MianowicieDelegat może wykonać dowolną metodę z tym samym typem parametrów pobierania i typem return, a nawet kolejkę metod o tym samym podpisie.

Czy więc nasze sygnatury metod (czyli parametry importu i wyjścia) naprawdę muszą być dokładnie takie same jak w przypadku delegata? Odpowiedź: Nie, nie możemy ignorować kowariancji i wariancji odwrotnej.
Krótko przedstawmy wiedzę o kowariantach i inwerterach.

"Kowariancja" oznacza możliwość użycia typu, który jest bardziej wyprowadzony niż pierwotnie określony typ pochodny.
"Inwerter" odnosi się do możliwości użycia typu o mniejszym stopniu pochodzenia.
Wtedy nasza komisja również podlega kowariancji i odwrotności.

Oznacza to, że jeśli delegat zostanie zdefiniowany, nie tylko ta sama metoda podpisu może przypisać wartość zmiennej delegata.
Jeśli tabela parametrów metody odpowiada deklaracji delegata, ale zwraca wyprowadzoną klasę (deklaracja delegata zwraca typ), to metoda może być również przypisana do tej zmiennej delegata.
Jeśli typ return metody odpowiada deklaracji delegata, ale argument jest klasą przodka typu parametru deklaracji delegata, to metoda może być również przypisana do zmiennej delegata.
Jeśli parametry i typ zwrotu metody odpowiadają założeniom z powyższych dwóch linii, to metoda może być również przypisana do zmiennej delegata.

Poniżej znajduje się prosty przykład różnicy kowariantnej kontra inwerter:

Kowariancja:

Inwerter:







Poprzedni:Konstrukcja MFC
Następny:Jak ustalić, który PID procesu jest zajęty przez plik
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com