2

これは通常の実装です。

public event MyDelegate MyEvent; 

そして、これは明示的な実装です。

private MyDelegate eventStorage
public event MyDelegate MyEvent
{
  add
  {
     eventStorage += value;
  }
  remove
  {
     eventStorage -= value;
  }
}

では、どの実装がより適切であり、どの場合にそれぞれを使用する必要がありますか?アドバイスをありがとう

4

3 に答える 3

3

2つの例は同等です。コンパイラは、最初のバージョンをコンパイルするときに2番目のバージョン(または同様のバージョン)を生成します。

これは単なる構文糖衣です。使いやすい方を使用してください。

これは、コンパイラが自動実装されたプロパティで行うことと似ていると考えることができますが、その逆です。

于 2012-06-08T09:36:49.033 に答える
2

Normalは、サブスクリプションだけであれば、とにかく明示的な実装と非常によく似たものにコンパイルされます。手動実装の利点は、誰かがイベントをサブスクライブまたはサブスクライブ解除したときに何かを行う機会があることです。

MSDNのドキュメントは、例2の使用例を示しています。

個人的には、日常の活動で手動でイベントを発生させる必要はありません。したがって、ほとんどの場合、同じことを表現するのに必要なコードが少ないと考えると、通常の方法が「より適切」です。

例のようなことをしたいときはすぐに、それを明示的に「より適切に」行うだけでなく、実際に必要になります。

于 2012-06-08T09:37:22.887 に答える
2

自動実装が適切でない場合にのみ、明示的に使用する必要があります。

たとえば、WinFormsイベントは、明示的な実装を使用して、クラスのデリゲートフィールドの数を減らします(イベントごとに1つ生成されます)。これは、特定のイベントをサブスクライブする人がいない場合は役に立ちません。これまでにサブスクライブしました。これは、これが役立つ可能性がある1つのケースにすぎません。

イベントのサブスクライブ/削除中にセキュリティチェックをログに記録または適用することもできます。

于 2012-06-08T09:39:54.430 に答える