クラスに強制的にイベントを登録させることはできますか? プロパティが有効でない場合に発生するイベントでプロパティを検証したいと考えています。クラスのコンストラクターで、すべてのクラスにインターフェイスを強制的に実装するIValidインターフェイスを取得したい(彼らが私のクラスを使用したい場合)。したがって、私のプロパティの検証は安全であり、無効な値を取得することはありません。それとももっと良い機会がありますか?
よろしく
必要に応じて、コンストラクターでイベント ハンドラーを受け入れることができます。
public class Foo
{
public event Action<string> Bar;
public Foo(Action<string> initialHandler)
{
Bar += initialHandler;
}
}
技術的には、誰かがnull
forを渡すことができる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; }
}
これにより、エンティティ/クラスが無効な状態になることはありません。
イベントは、サブスクライバーの数が合法的にゼロ以上である可能性がある状況で最もよく使用されます。オブジェクトの構築で通知を送信する場所が必要な場合、コンストラクターは、通知インターフェイスを実装するオブジェクトを受け取るか、適切な通知アクションを実行するデリゲートを受け取る必要があります。デリゲートを使用する場合は、イベント リストに追加するのではなく、独自のフィールドに格納する必要があります。インターフェイスまたはデリゲートが null でないことを確認するためにサニティ チェックを行うことは価値があるかもしれませんが、ほとんどの場合、それ以上のパラノイアの理由はありません。