Предлагаю прочитать учебник по теме.
По сути, вы объявляете тип делегата:
public delegate void MyDelegate(string message);
Затем вы можете назначить и позвонить напрямую:
MyDelegate = SomeFunction;
MyDelegate("Hello, bunny");
Или вы создаете событие:
public event MyDelegate MyEvent;
Затем вы можете добавить обработчик событий извне, как это:
SomeObject.MyEvent += SomeFunction;
Visual Studio помогает с этим. После того, как вы ввели + =, просто нажмите tab-tab, и он создаст для вас обработчик.
Затем вы можете запустить событие изнутри объекта:
if (MyEvent != null) {
MyEvent("Hello, bunny");
}
Это основное использование.