I've finally learned what "upward compatible" means. It means we get to keep all our old mistakes. --Dinnie van Tassel

Delegate Syntax and Usage in C#

Overview

How do I create a delegate in C#?

Delegate Type Declaration in C#
// simple delegate type declaration
public delegate void MessageHandler(string message);

// with various input parameters
public delegate int CountDaysHandler(CountMethod method, DateTime startDate, DateTime endDate)
Delegate Method Definition in C#
// Defining the delegate

public void HandleMessage(string message)
{
   // do something with the message
}

public int CountDays(CountMethod method, DateTime startDate, DateTime endDate)
{
   // return the number of days between the dates using the desired technique
   return -1;
}

// Define the delegate as an event
public class MyClass
{
   public event MessageHandler OnMessage;
}
Instantiate and Assign the Delegate
// declare a new MessageHandler delegate
private MessageHandler _MyMessageHandler = new MessageHandler(HandleMessage);

private CountDaysHandler _MyCounter = new CountDaysHandler(CountDays);

// register a delegate with an event
MyClass.OnMessage += new MessageHandler(HandleMessage);

// un-register
MyClass.OnMessage -= new MesageHandler(HandleMessage);

// View list of registered delgates
Delegate[] delegateList = OnMessage.GetInvocationList();
foreach (Delegate d in delegateList)
{
   // do something with the delegate
}
 

Version: 6.0.20200920.1535