强制一个类来注册事件

时间:2013-03-15 19:03:11

标签: c# interface

是否可以强制课程注册活动?我想用一个事件验证我的属性,如果属性无效则触发该事件。在类的构造函数中,我想获得一个IValid接口,它强制所有类实现接口(如果他们想使用我的类)。所以我的属性的验证是安全的,永远不会得到无效的值。还是有更好的机会?

问候

3 个答案:

答案 0 :(得分:1)

如果需要,您可以在构造函数中接受事件处理程序:

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

现在,从技术上讲,有人可以为null传递initialHandler,因此您需要检查它,但希望它有助于向此类用户明确事件处理程序需要在可以使用之前提供。

答案 1 :(得分:0)

您可以使您的类型不可变并在构造时进行验证。

类似的东西:

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

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

答案 2 :(得分:0)

事件最适用于订户数量合理地为零的情况。如果对象的构造要求它具有发送通知的某处,那么构造函数应该接收实现通知接口的对象,或者接收将执行适当的通知动作的委托。如果使用委托,则不应将其添加到事件列表中,而是存储在其自己的字段中。理所当然地检查界面或委托可能是值得的,以确保它不是空的,但在大多数情况下,除此之外没有任何偏执的理由。