我有点在这里支持自己.
我有一系列从父级继承的UserControl,它包含一些方法和事件来简化事情,因此我不必编写几乎相同代码的行和行.像你一样做.父级不包含其他控件.
我想要做的只是在父UserControl中有一个事件处理程序,它只执行父控件可以执行的操作(即,有条件地调用事件,因为父事件中定义了事件).然后我将这个事件处理程序连接到我的子控件中的所有输入框,子控件将解析输出的任务并告诉父控件是否抛出该事件.很好,干净,没有重复,复制粘贴代码(这对我来说总是会导致错误).
这是我的问题.Visual Studio认为我太聪明了一半,并警告我"方法'CheckReadiness'[父级中的事件处理程序]不能是事件的方法,因为这个类派生的类已经定义了方法." 是的,Visual Studio,这就是重点.我希望有一个事件处理程序,它只处理子类抛出的事件,它唯一的工作就是让我能够连接子代,而不必编写一行代码.我不需要那些额外的处理程序 - 我需要的所有功能自然被称为子进程处理用户输入.
我不确定为什么Visual Studio现在开始抱怨这个(因为它让我以前做过),而且我不确定如何让它消失.最好,我想这样做而不必定义一个只调用CheckReadiness的方法.造成这种警告的原因是什么原因导致它在一小时前没有出现,如何在不使用所有儿童班的小手柄的情况下让它消失?
声明父方法virtual,在子类中覆盖它并调用
base.checkReadyness(sender, e);
(或从其中删除)来自儿童类别.这允许未来的设计演变,如果你想在调用父事件处理程序之前做一些特定的错误检查代码.您可能不需要为每个控件编写数百万个这样的事件处理程序,您只需编写一个,将所有控件挂钩到此事件处理程序,然后调用父事件处理程序.
我注意到的一件事是,如果所有这些代码都放在一个dll中,那么你可能会遇到尝试从dll中调用事件处理程序的性能问题.