2016-02-05 46 views
-2

像例如觀察者模式。在教程中,類(觀察者)將自己註冊到類(觀察者),然後觀察者類將觀察者保存到列表中。我的問題是觀察者類何時重置其值。例如有人可以向我解釋一個類的數據的生命週期

的Class1.cs有這樣的代碼,

//declares a property 
public List<string> list; 

//and then initialize it on a constructor 
public class1() 
{ 
list = new list<string>(); 
} 

,然後class1的初始化是唯一的。

因此,只有當應用程序關閉或重新啓動時,class1中的數據纔會重置寫入?

所以這裏是另一個問題。如果class1的初始化超過了1,該怎麼辦?

class1 instance1 = new class1(); 

instance1.list.add("one"); 

class2 instance2 = new class1(); 
+0

「重置」的概念根本就不存在於語言中。什麼時候一個類的實例「重置」它的「值」?決不;沒有「重置價值」這樣的東西。澄清你的問題,詢問實際存在的事情。 –

+0

@eric lippert ..在上面的問題中,我問的是什麼時候「重置它的值」,我不知道是否有重置或什麼。我所關心的是關於數據的生命週期......它在我的標題中,我猜。可能是我的問題不清楚..對不起回合 – googleler

回答

2

我覺得你對觀察者和觀察者感到困惑。

IMO,由於事件存在於C#中,因此不需要使用觀察者和觀測值。但如果你真的想使用它們,那很好。

可觀察的是一個會在某個時間點引發事件的類。而一個觀察員處理事件。

讓我們通過一個例子來說明這一點。 Button是可觀察的。無論何時單擊按鈕,該課程都會引發一個Clicked事件。現在你想知道當按鈕被點擊時。所以你使用事件處理方法來訂閱Button的click事件。

你在問什麼時候observable會丟失或重置觀察者列表。我的回答是:it 可以在任何時候都可以做

正如您所知,observable將觀察者列表保留爲私有字段。因此,在可觀察的內部,代碼可以訪問該字段。因此,如果某個方法或某種可觀察類呼叫:

observers.Clear(); 

然後列表重置!

但是如果沒有調用Clear方法呢?觀察員何時會離開?

由於觀察員名單是一個字段,當應用程序運行完成後,它會被丟棄,或者一些析構函數銷燬掉實例,或者是垃圾回收......

這很簡單!但爲什麼你首先關心這一點?

編輯:

因此,當應用程序被關閉或重新啓動寫內部的Class1中的數據僅重置?

是的!如果實例將被垃圾收集,數據也將重置。

如果class1的是超過初始化那些

要回答這個問題,你需要知道一個實例之間的差異。一個班級就像一個實例的藍圖。當您實例化一個類時,會創建一個新實例。因此在您的代碼中,有class1的兩個實例:instance1instance2。它們是完全獨立的,這意味着listinstance2不包含"one"。而當instance1被垃圾收集時,您只會丟失instance1的數據,而不是instance2。但是,當應用程序退出時,所有實例都會收集起來,因此數據不見了。 *

*注:實際上,當應用程序關閉時,情況可能仍然在內存中。我說數據已經消失,因爲它們無法訪問。

+0

嗨,謝謝你給我的問題時間。我更新了我的帖子。並添加了更多的問題 – googleler

+0

我得出去幾個小時,我會更新它,一旦我回來@googleler – Sweeper

相關問題