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'引用?
谢谢你帮我理解这封闭的东西。
对不起,我改变了我的问题,使其更清晰。我试图找出传递给闭包的内容:对'this'的引用还是对子对象本身的引用? – 2010-05-03 02:17:32
你现在拥有的不是真正的封闭。这只会导致创建实例方法而不是静态方法。 – 2010-05-03 02:23:05
如果我想使它成为一个真正的闭包,我会创建一个局部变量,如:var me = this;然后在lambda中调用me.myChildObject.UndoChangeState()? – 2010-05-03 02:28:23