我有几个类,它们都有一个名为Tool的基类。 在表单中,我有一个Tool引用,其中包含上述类的一个实例。 当鼠标按下事件发生在表单上时,我调用当前Tool方法,例如"CurrentTool.MethodWhenMouseDown()"。
大多数工具都有3个方法:
MethodWhenMouseDown()
MethodWhenMouseUp()
MethodWhenMouseMove()
但是有一两个班级只有:
MethodWhenMouseDown()
现在哪个更好:
1. 在工具中放置三种方法,对于不需要它们的类只需调用空方法。 2. 实现接口,例如IMouseMoveListener,只有需要在MouseMove事件发生时执行操作的类才会实现它。这样,如果MouseMove事件发生,我们就会询问:
if(CurrentTool is MouseMoveListener)
{
(CurrentTool as IMouseMoveListener).MethodWhenMouseMove();
}
附加信息:
该程序类似于Ms Paint - 工具有Brush、Bucket(无需MethodWhenMouseMove)、LineTool等。
在我的PaintForm中,我有一个抽象基类工具的引用,存储了派生类之一的实例。触发事件的是pictureBox。
您考虑过工具订阅的事件吗?- CodesInChaos
我认为在表单中编写一个方法,并在事件发生后调用该方法并调用CurrentTool的适当方法将是一个好的实践。例如:
void MouseMoveSubscriber(object sender, MouseEventArgs e)
{
CurrentTool.MethodWhenMouseMove(e);
}
我认为每次更改CurrentTool时订阅和取消订阅该方法是一种不好的做法。我也考虑过在表单中拥有所有工具引用,并且每个工具都会订阅事件,这样就不需要取消订阅了。但我认为这种方法的一个很大的缺点是每个工具都需要检查它是否是CurrentTool。
您对此有何看法?感谢您提供的帮助。