Делегаты C# обладают следующими свойствами:
- позволяют обрабатывать методы в качестве аргумента;
- могут быть связаны вместе;
- несколько методов могут быть вызваны по одному событию;
- тип делегата определяется его именем;
- не зависят от класса объекта, на который ссылается;
- сигнатура метода должна совпадать с сигнатурой делегата.
Синтаксис
Шаг 1 — Объявление
modifier delegate ReturnType DelegateName ([Parameter_1]);Шаг 2 — Инициализация
Делегат инициализируется путём передачи ему имени метода в качестве аргумента.
DelegateName DelgObjectName = new DelegateName(MethodName);Шаг 3 — Вызов
Вызываем созданный делегат с указанием параметров, если это необходимо.
DelegateObjectName([Parameter_1]);Пример 1
Нижеприведённый код складывает между собой два числа:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DelgateForNotes
{
class Program
{
// Объявление делегата, ссылающегося на функцию
// с двумя параметрами и целочисленным результатом
public delegate int AddDelegate(int num1, int num2);
static void Main(string[] args)
{
// Создание метода делегата и передача функции Add в качестве аргумента
AddDelegate funct1 = new AddDelegate(Add);
// Вызов делегата
int k = funct1(7, 2);
Console.WriteLine("Sumation = {0}", k);
Console.Read();
}
// Статическая функция Add с той же сигнатурой, что и у делегата
public static int Add(int num1, int num2)
{
Console.WriteLine("I am called by Delegate");
int sumation;
sumation = num1 + num2;
return sumation;
}
}
}Выводом будет следующий результат:

А вы вообще уверены, что правильно понимаете, что такое делегат? Так вот, делегат в c# - это такая сущность, которая может представлять собой некий метод. Можно сказать, что делегат определяет сигнатуру метода и его возвращаемое значение. (а можно также сказать, что делегат - это такой указатель на функцию, как, скажем, в С++, но с некотрыми оговорками).
Так вот Func (и любая его разновидность в том числе) - это всего лишь разновидность делегата. То есть любой Func - делегат, но не любой делегат - Func и сравнивать их не очень уместно.
А что касается этого:
Оба используются я целью возвращения значения, оба могут принимать несколько параметров
то вот вам пример делегата, который не принимает аргументов и не возвращает значений:
delegate void SomeDelegate();
Комментариев нет:
Отправить комментарий