簡體   English   中英

強制班級注冊活動

[英]Force a class to register event

是否可以強迫一個班級注冊一個事件? 我想用一個事件驗證我的屬性,如果該屬性無效,則該事件觸發。 在類的構造函數中,我想要一個IValid接口,該接口強制所有類都實現該接口(如果他們想使用我的類)。 因此,對我的屬性的驗證是安全的,並且永遠不會獲得無效的值。 還是有更好的機會?

問候

如果需要,可以在構造函數中接受事件處理程序:

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

現在,從技術上講,有人可以為initialHandler傳遞null ,因此您需要進行檢查,但是希望它可以幫助此類用戶清楚使用該類型之前需要提供事件處理程序。

您可以使類型不可變並在構造上進行驗證。

就像是:

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; }
}

這樣可以確保您的實體/類永遠不會進入無效狀態。

在用戶數可以合法地從零開始增加的情況下,最好使用事件。 如果對象的構造要求它具有在某處發送通知的對象,則構造函數應接收實現通知接口的對象,或者將執行適當的通知動作的委托。 如果使用一個委托,則不應將其添加到事件列表中,而應存儲在其自己的字段中。 健全檢查接口或委托以確保其不為空可能是值得的,但是在大多數情況下,沒有其他理由導致妄想症。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM