将调用列表从一个委托复制到另一个委托

时间:2010-11-30 16:16:11

标签: .net events delegates

我正在使用表达式构建器模式来构建对象。表达式构建器在对象上配置的一件事是事件处理程序。这是一些示范性的伪代码:

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中“handler”成员封装的调用列表传递给target中的“SomeEvent”。否则,ObjectBuilder将不会被垃圾收集,因为我的TargetObject的“SomeEvent”将保存对ObjectBuilder的“处理程序”的引用。

这可能吗?

编辑: 根据要求,这里有一些使用这些类的示例代码:

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

        private static void DoSomething()
        {
        }
    }

1 个答案:

答案 0 :(得分:0)

你确定ObjectBuilder不是GC编辑的,因为TargetObject实例正在保持其“处理程序”字段吗? delegate是不可变的,this.handler + = handler将创建一个新的Action实例。