どうすれば実装できますか? 複数のアセンブリで機能しますか? そうでない場合、どうすれば機能しますか?
1 に答える
質問を完全に理解していない可能性があるため、別の可能な説明を提供したいと思います。
クラスについて言えば、Java にはEventListenerがあり、.NET にはEventHandlerがあります。どちらもイベント処理という同じ目的を持っています。ただし、実装には違いがあります。.NET のイベント処理は、Java のイベント リスナーに対するより高いレベルの抽象化であると言えます。
Java の EventListener は、「すべてのイベント リスナー インターフェイスが拡張する必要があるタグ付けインターフェイス」です (つまり、MouseListener)。.NET の EventHandler はデリゲートであり、イベントを処理するメソッドへの厳密に型指定されたポインターです。
より広義には、イベント リスナーはイベント処理用のインターフェイスを実装するオブジェクトであり、イベント ハンドラーはイベントを処理する単なるメソッドです。一般的に言えば、イベント リスナーはオブザーバー デザイン パターンを実装し、イベント ハンドラーはそのパターンのすべての配管を非表示にします。したがって、イベント リスナーの作成は、イベント ハンドラの作成よりもはるかに複雑で、口頭で行う傾向があります。
Microsoft のObserver Design Patternを読んで理解を深めることをお勧めします。
したがって、イベント ハンドラーを実装するには、処理するオブジェクトのイベントにデリゲートを割り当てるだけです。いえ
Button.Click += new EventHandler(MyButton_Click);
ここで、MyButton_Click は、EventHandler の署名を持ち、実際にイベントを処理するメソッド (クラスまたは他の場所にある可能性があります) です。
private void MyButton_Click(object sender, EventArgs e)
{
doSomething();
}
Java のイベント リスナーで同じことを行うには、次のように記述します (記憶から書いているため、間違いがあった場合はご容赦ください)。
public class MyClass
{
Button myButton;
MyClass()
{
...
myButton.addMouseListener(new ButtonHandler());
}
public class ButtonHandler implements MouseListener
{
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseClicked(MouseEvent e)
{
doSomething("Mouse clicked", e);
}
}
}
当然のことながら、クラス自体、内部クラス、匿名クラス、アダプターなどに EventListener インターフェイスを実装するなど、この一般的なオブザーバー パターンを実装する方法は多数あります。