-3

Java では多くのクラスがリスナーからコールバックをサポートしていますが、それはオブザーバー パターンだと思います。しかし、nc# が見つからないのはなぜですか?

4

4 に答える 4

5

C# は明示的なListener型を、クライアントが特定の型のコールバックを登録できるようにするイベントに置き換えました。最近では、Reactive Extensionsライブラリにオブザーバー パターンが実装され、Linq を使用してイベントを変換、フィルター処理などできるようになりました。

于 2013-01-14T23:24:59.110 に答える
5

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 問題を回避できるようにすることは言うまでもありません。

于 2013-01-14T23:23:22.350 に答える
4

C# では、デリゲートとイベント、およびラムダ式が使用され、非常に優れたパターンが可能になります。

于 2013-01-14T23:23:44.773 に答える
3

ええと... C# のコールバックを列挙すると、 DelegatesEvents、およびLambda Expressionsがあり、ファースト クラス関数として機能する Java リスナーを置き換え、コーディング パターンの品質を向上させることができます。最近、Linq Reactive Extensionsが導入され、開発者向けのツールがさらに増えました。

于 2013-01-14T23:24:39.563 に答える