Вы можете использовать класс EventArgs с помощью подхода Generic Types. В этом примере я буду использовать класс Rect с типом возвращаемого значения:
public EventHandler<Rect> SizeRectChanged;
Поднятие события:
if(SizeRectChanged != null){
Rect r = new Rect(0,0,0,0);
SizeRectChanged(this,r);
}
Прослушивание события:
anyElement.SizeRectChanged += OnSizeRectChanged;
public void OnSizeRectChanged(object sender, Rect e){
//TODO abything using the Rect class
e.Left = e.Top = e.Width = e.Height = 50;
}
Итак, вам не нужно создавать новые классы событий или делегаты, просто создайте EventHandler, передавая определенный тип T.