Кіріспе

Делегация - ортақ тілдік инфрақұрылым (CLI) қолданатын қауіпсіз функцияның нұсқауышының түрі. Делегаттар шақыру әдісін және әдісті шақыру үшін нысанды анықтайды. Делегаттар, басқалармен қатар, қайта қоңыраулар мен оқиға тыңдаушыларын іске асыру үшін қолданылады. Делегаттық объект әдіске сілтемені қоршап алады. Делегация объектісі кейін сілтеме жасалған әдісті шақыратын кодқа берілуі мүмкін, компиляция кезінде қай әдісті шақыратынын білудің қажеті жоқ. Көп таратушы делегат - бірнеше әдістерге сілтейтін делегат. Көп таратуды беру - бірден көп әдісті орындау үшін функционалды қамтамасыз ететін механизм. Делегаттардың тізімі ішкі сақталады, ал көп тарату делегаты шақырылған кезде делегаттар тізімі орындалады. C#-да делегаттар жиі оқиғаға негізделген бағдарламалауда кері шақыруларды іске асыру үшін қолданылады. Мысалы, пайдаланушы қандай да бір батырманы шерткенде қай әдісті шақыру керектігін көрсету үшін делегат қолданылуы мүмкін. Делегаттар бағдарламашыға оқиғаның орын алғанын бірнеше әдістерге хабарлауға мүмкіндік береді.

Техникалық іске асырудың егжей-тегжейлі сипаттамасы

Ішкі іске асырулар әр түрлі болуы мүмкін, бірақ делегат инстанцияларын объект пен әдіс сілтемесі мен басқа делегатқа сілтеме (мүмкін null) ретінде қарастыруға болады. Сондықтан бір делегатқа сілтеме жасау бірнеше делегатқа сілтеме жасау мүмкін. Бірінші делегат аяқталғаннан кейін, егер оның тізбектік сілтемесі нөл болмаса, келесісі шақырылады және т.б. тізім толық болғанға дейін. Бұл үлгі оқиғаның бір сілтемеден бастап делегаттар тізіміне жіберуге дейін оңай масштабталуына мүмкіндік береді және CLI-де кеңінен қолданылады.

Өнер көрсету

Делегаттардың орындалуы виртуалды немесе интерфейс әдісін шақырудан (6-дан 8 есеге дейін Microsoft-тың 2003 жылғы эталондық көрсеткіштері) әлдеқайда баяу болды, бірақ 2005 жылы NET 2.0 CLR-ден бастап интерфейс шақыруларымен бірдей болды. Бұл тікелей әдісті шақырумен салыстырғанда кішкентай қосымша үстеме шығындар бар дегенді білдіреді. Делегаттар кластарын құруға қатысты өте қатаң ережелер бар. Бұл ережелер типтік қауіпсіздікті қамтамасыз ете отырып, делегаттарды оңтайландыру кезінде компиляторларды оңтайландыруға үлкен мүмкіндік береді.