Я использую шаблон построителя выражений для создания объекта. Одна из вещей, которую построитель выражений настраивает на объекте, это обработчики событий. Вот некоторый демонстративный псевдокод:
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()
{
}
}