Большинство событий в .NET имеют следующую подпись:
delegate void SomethingSomething(SomethingEventArgs e);
event SomethingSomething OnSomethingSomething;
и
class SomethingEventArgs
{
public string Name;
public int Index;
public double Groar;
}
Почему это лучше (очевидно, иначе кто-то захочет делать), чем:
delegate void SomethingSomething(string Name, int Index, double Groar);
event SomethingSomething OnSomethingSomething;
так как вам не нужно упаковывать ваши параметры в объект и без инициализаторов (.NET 2.0), это было типичное упражнение.
Одна из причин, которая приходит на ум, состоит в том, что вы можете вернуть свои ценности проще, когда они упакованы в объект - т.е. обработчик может изменять член объекта. Однако при многоадресных событиях это не всегда может быть хорошим.
Итак, почему?