是否可以强制一个类注册一个事件?我想用一个事件来验证我的属性,如果属性无效就会触发。在类的构造函数中,我想获得一个 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; }
}
这确保您的实体/类永远不会进入无效状态。
事件最好用于订阅者数量可能合法地从零开始的任何情况。如果一个对象的构造需要它在某个地方发送通知,那么构造函数应该接收一个实现通知接口的对象或一个将执行适当通知操作的委托。如果使用一个委托,则不应将其添加到事件列表中,而应存储在其自己的字段中。对接口或委托进行健全性检查以确保它不为空可能是值得的,但在大多数情况下,除此之外没有任何偏执的理由。