2012-04-20 70 views
2

我爲化學分析儀器編寫了一個序列轉換器。我將每行視爲一個對象,並將該對象的每個字段視爲另一個對象。當一行被添加到列表中時,我需要對某些字段對象(如訂單編號)進行一些更新,因此我在該行內的每個字段對象上實施了一個委託指針。當我嘗試克隆一個行對象時,問題就出現了,委託仍然指向原始對象並更新字段成員。我試圖取消註冊克隆上的偵聽器並將其註冊回來,但它仍然運行原始對象上的代碼。我是否應該取消註冊所有聽衆,然後製作克隆並將其註冊回原點和克隆?做這個的最好方式是什麼?如何用內部代表克隆一個對象

第二個問題:我試圖使用Delegate.RemoveAll函數,但不知道要傳遞什麼。它將目標和方法稱爲代表。有人使用過它嗎?

+4

最好的主意:儘量避免代表在這裏。 – 2012-04-20 08:50:16

+0

這聽起來像你需要一個DataTable對象? – 2012-04-20 12:59:25

回答

0

使用委託使對象成爲有狀態而非無狀態。爲了實現一個無狀態的對象,它需要所有的屬性都是自包含的,這樣克隆操作才能做到這一點,成爲一個克隆而不是原始的。

既然是有狀態的對象,人們將需要創建一個管理對象(或拷貝構造函數),它可以巧妙地穿越原始和重建沒有原始的代表的新對象,但適當的者自身