2010-05-03 87 views
0

我正在使用动作列表来存储对象的撤消历史记录。比方说,我有一个名为myChildObject我的对象的属性和它的被一个方法调用突变,所以我要存储撤消行动,我会变异它回到它的当前值:在闭包中使用属性名称时是否需要包含'this'?

public class Class1 
{ 
    public Class1() 
    { 
    } 

    private readonly List<Action> m_undoActions = new List<Action>(); 

    private SomeObject myChildObject { get; set; } 

    public void ChangeState() 
    { 
     m_undoActions.Add(() => myChildObject.UndoChangeState()); 
     myChildObject.ChangeState(); 
    } 
} 

纵观拉姆达表达式,是对myChildObject(对象)的引用,或者是对this传递的引用。我需要使用“这个”来作为序言吗?我是否需要先复制一个局部变量的'this'引用?

谢谢你帮我理解这封闭的东西。

回答

3

不,不需要明确指定成员作为lambda内的实例成员,而不是lambda之外的成员。

+0

对不起,我改变了我的问题,使其更清晰。我试图找出传递给闭包的内容:对'this'的引用还是对子对象本身的引用? – 2010-05-03 02:17:32

+0

你现在拥有的不是真正的封闭。这只会导致创建实例方法而不是静态方法。 – 2010-05-03 02:23:05

+0

如果我想使它成为一个真正的闭包,我会创建一个局部变量,如:var me = this;然后在lambda中调用me.myChildObject.UndoChangeState()? – 2010-05-03 02:28:23

相关问题