2016-02-24 54 views
0

我目前正在編寫一個應用程序,我在其中反序列化相對較大的對象(它也可以增長的大小,取決於用戶添加到他們)。我不想將所有這些內容加載到RAM中,因爲當它們中有很多時它們可能會導致問題。訂閱事件處理程序引用是NULL

無論如何,我想處理由該類的已加載實例引發的事件,如果有已經是我的問題的事件。

我該如何訂閱一個事件處理程序到一個仍然爲空的對象?

我覺得像「如果有一個對象,它引發該事件處理它的方法」。



下面是一些示例代碼,我能想到的,雖然我已經想到它不能正常工作的唯一方法..

public class MyClassA 
{ 
    public event EventHandler PropertyChanged; 

    private string someProperty 
    public string SomeProperty 
    { 
     set 
     { 
      someProperty = value; 
      PropertyChanged?.Invoke(this, EventArgs.Empty); 
     } 
    } 

    public static MyClassA Load(string path) 
    { 
     /*...*/ 
    } 
} 

public class MyClassB 
{ 
    public MyClassA InstanceOfA { get; private set; }   

    public MyClassB 
    { 
     //InstanceOfA.PropertyChanged += MyEventHandler; Not working, NullReference 
    } 

    // Handle InstanceOfA.PropertyChanged here... 
    public void MyEventHandler(object sender, EventArgs e)   
    { 
     /*...*/ 
    } 
} 

+0

「?我怎麼可以訂閱一個事件處理程序的對象仍然是空」 - 你不能。 – Enigmativity

回答

2

當然,你可以不訂閱一個事件處理程序給一個仍然爲空的對象,但是當你爲它指定一個非空值時,你可以訂閱它。
只需使用屬性和支持字段:

public class MyClassB 
{ 
    private MyClassA myVar; 

    public MyClassA InstanceOfA 
    { 
     get { return myVar; } 
     private set 
     { 
      myVar = value; 
      if (myVar != null) 
       myVar.PropertyChanged += MyEventHandler; 
     } 
    } 

    public void MyEventHandler(object sender, EventArgs e) 
    { 

    } 
} 
+0

謝謝:)現在我明白了,這似乎很明顯。 – Stefan

相關問題