强制类注册事件

本文关键字:事件 注册 | 更新日期: 2023-09-27 18:04:12

是否可以强制一个类注册一个事件?我想用一个事件来验证我的属性,如果属性无效,这个事件就会触发。在类的构造函数中,我想获得一个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; }
}

这确保你的实体/类永远不会进入无效状态。

事件最适合在订阅者的数量可以合法地从0到更多的情况下使用。如果一个对象的构造需要它有发送通知的地方,那么构造函数应该接收一个实现通知接口的对象,或者接收一个执行适当通知操作的委托。如果使用委托,则不应将其添加到事件列表中,而应将其存储在自己的字段中。对接口或委托进行安全检查以确保其不为空可能是值得的,但在大多数情况下,没有理由超出此范围。