* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Делегаты
8 февраля 2009
Делегаты — это особые классы, обеспечивающие работу событий. В сущности, де- легат — это указатель на функцию, обеспечивающий контроль типов. Он позволяет передавать ссылку на точку входа метода и исполнять этот метод без традиционно- го явного вызова. При объявлении делегата указывают сигнатуру вызываемого им метода и тип возвращаемого результата:
Visual Basic .NET Public Delegate Function myDelegate(ByVal D As Double) As Integer Visual C# public delegate int myDelegate(dojble D): В этом примере объявляется делегат ту Delegate, вызывающий методы, которые возвращают результат типа Integer (int) и принимают в качестве параметра значение типа Double (double). Чтобы воспользоваться делегатом, необходимо создать его эк- земпляр с указанием метода, который он будет вызывать. В Visual C# этот метод задают по имени, а в Visual Basic .NET применяют оператор AddressOf, который со здает ссылку на адрес метода. Вот соответствующие примеры: Visual Basic .NET Это метод, который будет вызывать делегат. Public Function ReturnInt(ByVal d As Double) As Integer Реализация метода опущена, End Function Создать экземпляр делегата myDelegate, который будет вызывать метод Returnlnt. Dim aDelegate As New rnyDelegate(addressof Returnlnt) Visual C# // Это метод, который будет вызывать делегат. public int Returnlnt(double D) // Создать экземпляр делегата myDelegate, // который будет вызывать метод Returnlnt. public void amethodO { nyDelegate aDelegate = new myDelegate(Returnlnt): . При создании делегата для метода экземпляра в Visual C# необходимо инициа- лизировать делегат внутри этого метода. Делегаты статических методов можно ини- циализировать вне метода, который они вызывают. После объявления и инициализации делегат можно вызывать, как обычную фун- кцию, чтобы исполнить связанный с ним метод, например: Visual Basic .NET aDelegate(12345) Visual C# aDelegate(12345); ^ Как создать и вызвать делегат I . Объявите делегат с сигнатурой, идентичной сигнатуре метода (или методов), для вызова которого он будет использоваться. 2. Создайте экземпляр делегата, ссылающийся на метод с подходящей сигна гурой. 3. Вызывайте делегат в коде, ссылаясь на него по имени.