Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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