2010-05-03 30 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

相關問題