Java では多くのクラスがリスナーからコールバックをサポートしていますが、それはオブザーバー パターンだと思います。しかし、nc# が見つからないのはなぜですか?
4 に答える
C# は明示的なListener
型を、クライアントが特定の型のコールバックを登録できるようにするイベントに置き換えました。最近では、Reactive Extensionsライブラリにオブザーバー パターンが実装され、Linq を使用してイベントを変換、フィルター処理などできるようになりました。
C# は、Delegateの形式でファースト クラス関数をサポートします。
あなたの場合、イベントはリスナースタイルのパラダイムの基礎であることに注意してください。
たとえば、フォームは次のとおりです。
public class Form1
[--snip--]
public event EventHandler Closed;
public event EventHandler Clicked;
そして、そのフォームを変更したい別のクラス:
public class Other
{
public static void CloseHandler(object sender, EventArgs e)
{
Console.WriteLine("Closed");
}
public static void Main(string[] args)
{
Form1 form = new Form1();
form.OnClose += CloseHandler;
form.OnClick += (s,e) => Console.WriteLine("Click");
}
}
これにより (構文エラーがなければ)、フォームが閉じられたときに「Closed」がコンソールに出力されます。フォームがクリックされると「クリック」します。簡単にするために、呼び出しを行うコードを除外していることに注意してください。
また、C# のイベントは通常、割り込みイベント (アクションの直前に発生) を現在時制、事後イベント (アクションの直後に発生) を過去時制として名前が付けられることに注意してください。また、通常は OnClosed などを使用して、継承クラスがイベントをアタッチせずに機能をオーバーライドできるようにします。また、中心的な場所で null 問題を回避できるようにすることは言うまでもありません。
C# では、デリゲートとイベント、およびラムダ式が使用され、非常に優れたパターンが可能になります。
ええと... C# のコールバックを列挙すると、 Delegates、Events、およびLambda Expressionsがあり、ファースト クラス関数として機能する Java リスナーを置き換え、コーディング パターンの品質を向上させることができます。最近、Linq Reactive Extensionsが導入され、開発者向けのツールがさらに増えました。