Захват приватного поля в анонимном делегате

class A
{
   public event EventHandler AEvent;
}
class B
{
   private A _foo;
   private int _bar;

   public void AttachToAEvent()
   {
      _foo.AEvent += delegate()
      {
         ...
         UseBar(_bar);
         ...
      }
   }
} 

Так как delegate захватывает переменную this._bar, то неявно ли он удерживает экземпляр B? Будет ли на экземпляр B ссылаться через обработчик события и захваченную переменную экземпляр A?

Будет ли иначе, если _bar будет локальной переменной метода AttachToAEvent?

Поскольку в моем случае экземпляр A живет намного дольше и намного меньше, чем экземпляр B, я опасаюсь вызвать "утечку памяти", делая это.

12
задан garfbradaz 7 January 2019 в 10:29
поделиться