2013-03-15 69 views
0

是否可以強制班級註冊活動?我想用一個事件來驗證我的屬性,如果這個屬性不是有效的,就會觸發它。在類的構造函數中,我想獲得一個IValid接口,它強制所有類實現接口(如果他們想使用我的類)。所以我的屬性的驗證是安全的,永遠不會得到無效的值。還是有更好的機會?強迫班級註冊活動

關於

回答

1

您可以接受在構造函數中的事件處理程序,如果你想:

public class Foo 
{ 
    public event Action<string> Bar; 
    public Foo(Action<string> initialHandler) 
    { 
     Bar += initialHandler; 
    } 
} 

現在,在技術上,有人能null傳爲initialHandler,所以你需要檢查的是,但希望它有助於讓這個類的用戶清楚,在使用類型之前需要提供事件處理程序。

0

您可以使您的類型不可變和驗證施工。

喜歡的東西:

public class MyClass 
{ 
    public MyClass(string aString, int anInt) 
    { 
    // Check for validity - throw exception if not valid 

     ValidString = aString; 
     ValidInt = anInt; 
    } 

    public string ValidString { get; private set; } 
    public int ValidInt { get; private set; } 
} 

這可以確保你的實體/類不能進入無效狀態。

0

事件最適用於訂閱者數量從零開始可能合法成爲任何事物的情況。如果對象的構造要求它有某個地方發送通知,那麼構造函數應該接收一個實現通知接口的對象,或者接收執行適當通知操作的委託。如果使用委託,則不應將其添加到事件列表,而是存儲在其自己的字段中。對接口或委託進行完整性檢查可能是值得的,以確保它不爲空,但在大多數情況下,除此之外,沒有任何偏執的理由。