Можно ли сдавать один и тот же тест несколько раз? |
Опубликован: 01.11.2004 | Уровень: для всех | Доступ: свободно | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 18:
C#. Отражения. Делегаты
Аннотация: В лекции рассматривается использование делегатов для вызовов методов, применение делегатов как методов обратного вызова. Вводится понятие небезопасного кода, описывается процесс применения в управляемом коде фрагментов небезопасного кода и DLL-библиотек.
Ключевые слова: unsafe, экземпляры делегата, ПО, управляемый код, приложение, освобождение памяти, net, значение опции, unsafe code, выполняемый оператор
Объявление делегата
Использование делегата для вызова методов
Делегат объявляет новый ссылочный тип.
Делегат позволяет передавать функцию как параметр.
Объявление делегата имеет следующее формальное описание:
[атрибуты] [модификаторы] delegate тип_результата имя_делегата ([список_формальных параметров]);
Модификаторами делегата могут быть:
Тип результата должен соответствовать типу результата используемого метода. При создании делегата требуется, чтобы передаваемый как делегат метод имел ту же сигнатуру метода, что и в объявлении делегата.
Например:
using System; delegate void MyDelegate(); // Этот делегат позволяет // вызывать методы без параметров // и без возвращаемого значения
Для вызова метода через делегата следует создать экземпляр делегата, передав ему в качестве параметра метод, имеющий ту же сигнатуру, что и у делегата, а затем выполнить вызов. Для статического метода в качестве параметра передается имя метода, квалифицированное именем класса.
Например:
using System; delegate void MyDelegate(); namespace MyDelegat1 { class Class1 {[STAThread] static void Main(string[] args) { CA var1= new CA(); // Экземпляр делегата для нестатического метода: MyDelegate F_d = new MyDelegate(var1.F_Instance); F_d(); // Экземпляр делегата для статического метода: F_d = new MyDelegate(CA.F_Static); F_d(); } } public class CA { public CA() { } public void F_Instance() { Console.WriteLine("Вызов метода класса с использованием делегата"); } public static void F_Static() { Console.WriteLine("Вызов статического метода с использованием делегата"); } }