b.SomeEvent += this.SomeMethod
Здесь много сахара, который мешает вам увидеть, что на самом деле происходит.Записано, это похоже на это:
b.SomeEvent.add(new MulticastDelegate(this, SomeMethod)); // not legal code
Где add () является аксессором добавления для события, компилятор автоматически генерирует его, когда вы явно не объявите свой собственный.Первый аргумент конструктора делегата - это экземпляр объекта, о котором вы спрашиваете, свойство Target объекта делегата.Обратите внимание, что это имеет побочные эффекты, подписка на событие сохраняет ссылку на ваш объект b
.Это предотвращает сбор мусора, что было бы довольно плохо при вызове события.
Это также может быть проблемой, вы можете непреднамеренно утечь ссылку на объект.В вашем коде нет хорошего способа отменить подписку на обработчик событий, поэтому объект A будет жить так же долго, как и объект B, для которого вы вызвали h ().