Tool という名前の 1 つの基本クラスを持ついくつかのクラスがあります。フォームには、言及されたクラスのインスタンスの 1 つを含む 1 つのツール参照があります。フォームで MouseDown イベントが発生すると、現在のツール メソッドを呼び出します。"CurrentTool.MethodWhenMouseDown()".
ほとんどのツールには 3 つの方法があります。
MethodWhenMouseDown()
MethodWhenMouseUp()
MethodWhenMouseMove()
しかし、1つまたは2つのクラスには次のものがあります。
MethodWhenMouseDown()
今どちらが良いですか:
1. Tool に 3 つのメソッドすべてとそれらを必要としないクラスを含めるには、空のメソッドを呼び出すだけです。
2.インターフェースを実装するには MouseMove イベントが発生したときに動作する必要があるクラスによってのみ実装される IMouseMoveListener。このようにして、MouseMove イベントが発生した場合、次のように尋ねます。
if(CurrentTool is MouseMoveListener)
{
(CurrentTool as IMouseMoveListener).MethodWhenMouseMove();
}
追加情報:
プログラムは Ms Paint のようなものです - ツールはブラシ、バケット (MethodWhenMouseMove を必要としないもの)、LineTool など
です。イベントを発生させるのは、pictureBox です。
ツールがサブスクライブするイベントを検討しましたか? – CodesInChaos
イベントが発生し、そのメソッドが CurrentTool の siutable メソッドを呼び出した後に呼び出される形式のメソッドを用意することをお勧めします。元:
void MouseMoveSubscriber(object sender, MouseEventArgs e)
{
CurrentTool.MethodWhenMouseMove(e);
}
CurrentTool が変更されるたびに CurrentTool のメソッドをサブスクライブおよびサブスクライブ解除するのは悪い習慣だと思いますか?
また、すべてのツール参照を Form に含めることも考えました。イベントは各ツールによってサブスクライブされ、サブスクライブを解除する必要はありません。私の意見では、大きな欠点は、各ツールが CurrentTool であるかどうかを確認する必要があることです。
あなたはそれについてどう思いますか?助けてくれてありがとう。