检查班级是否有特定事件?

时间:2016-06-28 06:36:02

标签: c# winforms

有没有办法(可能是反思?)检查一个班级是否有特定的事件?

例如,要检查不同的对象,可以执行以下操作:

for (int i = 0; i < myObjects.Count; i++)
{
    if (!(myObjects[i] is Control))
        continue;

    ((Control)(myObjects[i])).Validating += myValidationEvent;
}

有没有办法做类似的事情:

for (int i = 0; i < myObjects.Count; i++)
{
    if (!(myObjects[i].HasValidatingEvent))
        continue;

    ((Control)(myObjects[i])).Validating += myValidationEvent;
}

HasValidatingEvent检查该对象是否有Validating事件。

1 个答案:

答案 0 :(得分:0)

可以使用反射来确定某个类是否有某个事件,并为.HasEvent(string eventName)创建一个扩展方法。然后,您仍然需要额外的反射或类型转换来为对象分配事件处理程序。

但是假设您的列表包含具有Validating事件的类型的对象,但它具有完全不同的含义和/或不同的签名 - 您不会&#39;我只想要任何Validating事件 - 你特别想要Control.Validating事件。

因此无论是否存在这样的属性,都可以选择转换为Control。您可以使用以下方式保存演员:

Control control = myObjects[i] as Control;
if (control == null)
{
    continue;
}

control.Validating += myValidationEvent;