Почему мы указываем делегата вместе с событием, почему бы просто не использовать событие в C #?
Например, у меня есть следующий код:
class Shop
{
internal delegate void _EventHandler(object sender, GoodsInfoEventArgs e);
internal event _EventHandler GoodsArrived;
public void BringGoods(string goods)
{
if (GoodsArrived != null)
{
GoodsArrived(this, new GoodsInfoEventArgs(goods));
}
}
}
Почему бы тем, кто разработал C #, не реализовывать события следующим образом:
class Shop
{
internal event _EventHandler GoodsArrived;
public void BringGoods(string goods)
{
if (GoodsArrived != null)
{
GoodsArrived(this, new GoodsInfoEventArgs(goods));
}
}
}
Я имею в виду без делегата.
Я знаю, как работает событие в C #.Он просто вызовет всех подписанных делегатов, если они есть, и будет равен нулю в противном случае.А также я знаю о разнице между событием и делегатом.Событие допускает только сложение или вычитание делегатов, но не позволяет изменять указатель (мы можем выполнять операции +=
и -=
над событием, но мы не можем выполнять операцию =
над событием), в то время как делегат позволяетвсе операции сложения, вычитания и назначения выполняются.Таким образом, событие является оберткой вокруг делегата, и обертка позволяет контролировать, каким образом делегат может измениться.
При этом я не понимаю причин, по которым я должен был определить делегата вкаждое место в программе, где мы определяем событие.
Если вы не поняли какую-либо часть моего вопроса, пожалуйста, спросите меня об этом, и я предоставлю дополнительную информацию.
Спасибо.
Прошу прощения за путаницу.Я имел в виду, почему бы не использовать что-то вроде этого:
internal event _EventHandler(object sender, GoodsInfoEventArgs e) GoodsArrived;
?