2010-11-30 2 views
1

Я использую шаблон выражения-строителя для создания объекта. Одна из вещей, которую настраивает построитель выражений на объекте, - обработчики событий. Вот некоторые демонстративное псевдо-код:Копировать список вызовов из одного делегата в другой

public class TargetObject 
    { 
     public event Action SomeEvent; 
    } 

    public class ObjectBuilder 
    { 
     private Action handler; 

     public TargetObject GetObject() 
     { 
      TargetObject target = new TargetObject(); 
      target.SomeEvent += handler; 

      return target; 
     } 

     public ObjectBuilder AddHandler(Action handler) 
     { 
      this.handler += handler; 
      return this; 
     } 
    } 

То, что я хотел бы, скорее, чем пишут:

this.handler += handler; 

Чтобы передать вызова-лист инкапсулированный членом «обработчика» в ObjectBuilder, чтобы " SomeEvent "в цель. В противном случае ObjectBuilder не получит сбор мусора, потому что в «SomeEvent» объекта TargetObject будет содержаться ссылка на обработчик объекта ObjectBuilder.

Возможно ли это?

EDIT: В соответствии с просьбой, вот некоторые примеры кода, который потребляет эти классы:

class Program 
    { 
     static void Main(string[] args) 
     { 
      TargetObject target = new ObjectBuilder() 
       .AddHandler(DoSomething) 
       .GetObject(); 
     } 

     private static void DoSomething() 
     { 
     } 
    } 
+0

Являются ли два объекта одного типа? – 2010-11-30 16:32:38

+0

Какие два объекта? – joniba 2010-11-30 16:38:43

ответ

0

Вы уверены, что ObjectBuilder не GC-е изд, потому что экземпляр TargetObject держит его поле «обработчик»? делегат является неизменным, this.handler + = обработчик создаст новый экземпляр Action.

Смежные вопросы