是否可以強制班級註冊活動?我想用一個事件來驗證我的屬性,如果這個屬性不是有效的,就會觸發它。在類的構造函數中,我想獲得一個IValid接口,它強制所有類實現接口(如果他們想使用我的類)。所以我的屬性的驗證是安全的,永遠不會得到無效的值。還是有更好的機會?強迫班級註冊活動
關於
是否可以強制班級註冊活動?我想用一個事件來驗證我的屬性,如果這個屬性不是有效的,就會觸發它。在類的構造函數中,我想獲得一個IValid接口,它強制所有類實現接口(如果他們想使用我的類)。所以我的屬性的驗證是安全的,永遠不會得到無效的值。還是有更好的機會?強迫班級註冊活動
關於
您可以接受在構造函數中的事件處理程序,如果你想:
public class Foo
{
public event Action<string> Bar;
public Foo(Action<string> initialHandler)
{
Bar += initialHandler;
}
}
現在,在技術上,有人能null
傳爲initialHandler
,所以你需要檢查的是,但希望它有助於讓這個類的用戶清楚,在使用類型之前需要提供事件處理程序。
您可以使您的類型不可變和驗證施工。
喜歡的東西:
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; }
}
這可以確保你的實體/類不能進入無效狀態。
事件最適用於訂閱者數量從零開始可能合法成爲任何事物的情況。如果對象的構造要求它有某個地方發送通知,那麼構造函數應該接收一個實現通知接口的對象,或者接收執行適當通知操作的委託。如果使用委託,則不應將其添加到事件列表,而是存儲在其自己的字段中。對接口或委託進行完整性檢查可能是值得的,以確保它不爲空,但在大多數情況下,除此之外,沒有任何偏執的理由。