有没有办法(可能是反思?)检查一个班级是否有特定的事件?
例如,要检查不同的对象,可以执行以下操作:
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
事件。
答案 0 :(得分:0)
您可以使用反射来确定某个类是否有某个事件,并为.HasEvent(string eventName)
创建一个扩展方法。然后,您仍然需要额外的反射或类型转换来为对象分配事件处理程序。
但是假设您的列表包含也具有Validating
事件的类型的对象,但它具有完全不同的含义和/或不同的签名 - 您不会&#39;我只想要任何Validating
事件 - 你特别想要Control.Validating
事件。
因此无论是否存在这样的属性,都可以选择转换为Control
。您可以使用以下方式保存演员:
Control control = myObjects[i] as Control;
if (control == null)
{
continue;
}
control.Validating += myValidationEvent;