2

イベントがどのようにデリゲートにアクセスするためのカプセル化を提供するかを誰かが説明できますか?代入演算子は使用できず、and=だけです。私が理解していない部分はこれです:+=-=

public delegate void CarEngineHandler(string msgForCaller);

public CarEngineHandler listOfHandlers;

もしそうならpublic、私たちはこれを行うことができますlistOfHandlers.invoke("hello");。これはわかりますが、イベントはどのようにカプセル化を提供しますか?

public events CarEngineHandler listOfHandlers;

listOfHandlers("hello"); //fire the event

イベントを発生させたり、いつでもデリゲートを呼び出したりしていませんか? カプセル化はどこにありますか?

4

2 に答える 2

3

Eventsそれらを提供したクラスによってのみ起動できます。クラスのパブリック イベントをサブスクライブできますが、別のクラスから起動することはできません。

イベントについてはMSDNを参照してください。

于 2013-03-18T20:24:50.663 に答える
0

イベントは、イベントへの応答がオブジェクトの外部で発生することを許可することによってカプセル化を提供しますが、オブジェクトはその情報を認識しません。

class A
{
    private event Action _event;
    public event Action Event { add { _event += value; } remove { _event -= value; } }
    int counter = 0;
    public void AddOne()
    {
        counter++;
        if (counter > 0)
        {
            OnEvent();
        }
    }
    private void OnEvent()
    {
        if (_event != null)
            _event();
    }
}
class Program
{
    int Main()
    {
        string outsidestring = "THE CLASS HAS NO IDEA WHO I AM";
        A a = new A();

        a.Event += new Action(()=>Console.WriteLine(outsidestring));

        while (true)
        {
            Console.ReadLine();
            a.AddOne();
        }
    }
}

この例では、A のカウンターが 10 に達すると、外側の文字列について何も知らなくても、外側の文字列で何かを行うことができます。

于 2013-03-18T20:30:18.547 に答える