問題があり、誰でも真実ではありません、私のビジネスコード
で、私のハンドラを呼び出します(その後、イベントを発生させる)ことができます。 (-=
)(+=
)外部コードはイベントで行うことができます唯一の事は、それに加入している
public event FooEventHandler Foo;
、またはそれからの退会:あなたは次のようにイベントを宣言します。コンパイラによってプライベートフィールドとして生成された実際のデリゲートにはアクセスできません。つまり、このコードは無効になります。
SomeClass x = new SomeClass();
x.Foo(x, new FooEventArgs()); // compilation error here
イベントは実際には一対のメソッド(追加と削除)であることを忘れないでください。あなたが見ることができるように
private FooEventHandler _foo;
public event FooEventHandler Foo
{
add { _foo += value; }
remove { _foo -= value; }
}
(生成されたコードは、スレッドの安全性を確保するために、いくつかのロックで、実際にはもう少し複雑です)
、_foo
フィールド:コンパイラは、これらの線に沿って何かにイベント宣言を書き換えプライベートなので、クライアントコードはアクセスできません。イベントのadd
とremove
アクセサのみアクセスできます。
はい、そのままです。私は混乱していました... :-( –
クラスAで代理人をパブリックとして宣言すると、クラスAのオブジェクトを作成する他のクラスは代理人にアクセスできます。安全のためにプライベート – helloworld