Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 20054|Отговор: 0

[Източник] Бързо разбиране на напреднали концепции по C# (1) Делегиране на делегати

[Копирай линк]
Публикувано в 19.01.2017 г. 15:18:00 ч. | | | |
Занимавам се с .NET разработка от дълго време и наскоро рецензирах книгата "C# Advanced Programming". Открих, че много проблеми, които някога сякаш разбирах, но не разбирах, всъщност могат да се изучават и разбират бавно.

Затова планирам да започна да пиша блог пост за "C# Advanced Programming Series". Тя ще черпи от концепцията на книгата "C# Advanced Programming" и ще се позовава и на публикациите в блога на други експерти, надявам се да разбирате. Ако има нещо нередно, моля, коригирайте го.

(Също така: Този блог пост няма да обясни основите на дефинициите и граматиката.) )



Нека поговорим за въвеждането в експлоатация.

Delegate се използва широко в .NET. Ще участват лямбда изражения, събития, методи за анонимност и др. (следете за следващи публикации в блога).

И така, какво е възлагане?

С прости думи, делегатите не се различават от методите за определяне, освен че трябва да посочат ключовата дума делегат и нямат методна единица. Можеш да го възприемеш като временен елемент, например, когато пишеш код, без да знаеш с какво ще се сблъскаш. Просто трябва да знаете какъв е типът параметър и изходният тип, който ще въведете, и да ги дефинирате. Това е методът, предаден в книгата, че подписът трябва да означава едно и също.

Нека дефинираме основна делегация:





Резултати от изпълнението:
Виждате ли горното практическо място, където да се доверите? А именноДелегат може да изпълни всеки метод със същия тип параметър за въвеждане и тип на връщане, или дори опашка за метод със същия подпис.

Значи наистина ли нашите сигнатури на метода (т.е. параметрите за импорт и изход) трябва да са точно същите като на делегата? Отговор: Не, не можем да игнорираме ковариацията и обратната вариация.
Нека накратко въведем знанията за ковариант и инвертор.

"Ковариация" означава възможност да използваш тип, който е по-производен от първоначално посочения производен тип.
"Инвертор" означава възможността да се използва тип с по-малка степен на производно.
Тогава нашата поръчка също е подложена на ковариация и обратно.

Това означава, че ако делегатът е дефиниран, не само същият метод за подпис може да присвои стойност на променливата делегат.
Ако таблицата с параметри на даден метод съвпада с декларацията на делегата, но връща производен клас на (декларацията за делегати връща типа), тогава методът може да бъде присвоен и на тази делегатна променлива.
Ако типът на връщане на даден метод съвпада с декларацията на делегата, но аргументът е класът предшественик на типа параметър за декларация на делегати, тогава методът може да бъде присвоен и на делегатната променлива.
Ако параметрите и типът на връщане на метода съвпадат с предположенията в горните два реда, тогава методът може да бъде присвоен и на делегатната променлива.

Следва прост пример за ковариантен и инверторен:

Ковариантност:

Инвертор:







Предишен:Дизайн на MFC
Следващ:Как да разберете в кой процес PID е зает файлът
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com