12

「Apress Pro LINQ: Language Integrated Query in C#」という本を読んでいて、部分メソッドに出くわしましたが、それらの必要性が本当にわかりません。

本にある例(変更前後のプロパティ)はイベントを使って実装できると思います。それで、説明はありますか?

4

4 に答える 4

22

はい、部分メソッドと同様の効果をイベントでも実現できます。部分メソッドは、コード ジェネレーター (主にデザイナー) が生成されていないコードのフックを生成できるようにするための方法にすぎません。イベントがこの役割を果たすことができます。

ただし、特にイベントよりも部分的なメソッドには利点があります

  • 実装がない場合、部分的なメソッド呼び出しは、生成された IL から完全に削除されます。これは、イベントでは実行できません。
  • 部分メソッドの設計は、フックの 1 つのプロバイダーと 1 つのコンシューマーが存在する問題を解決することです。イベントは、N 個のコンシューマーを持つ 1 つのプロバイダーをモデル化するためのものであり、そのような設計に伴うオーバーヘッドがあります。
  • 順番(先攻)の問題はありません。イベントでは、デザイナーがイベントを発生させるコードを生成する前に、イベントをサブスクライブするコードが実行されるようにする必要があります。デザイナーがコンストラクターを生成する場合、これが常に可能であるとは限りません。部分メソッドにはそのような問題はありません。
于 2010-09-02T15:54:21.263 に答える
3

それらは「必要」ではありませんが、大規模なアプリケーションには必要です。イベントを多用すると、ビジネス ロジックがユーザー インターフェイスと密接に結合された Smart UI のアンチパターンにつながりますが、部分的な関数を使用すると、懸念事項をより適切に分離できます。

ここには、部分メソッドに関する MSDN C# プログラミング ガイドへのリンクもあります。 http://msdn.microsoft.com/en-us/library/wa80x488.aspx

于 2010-09-02T15:53:30.667 に答える
2

実装がない場合、コンパイラは部分メソッドの呼び出しを削除します。イベントの代わりに、リスナーを実行時にチェックする必要があります (保存する必要もあります)。これにより、特に多くの潜在的な「イベント」があり、「リスナー」が登録されているのはごくわずかである場合に、部分メソッドのパフォーマンスが向上します。

于 2010-09-02T15:55:19.547 に答える
0

部分的なメソッドはコンパイル時に定義され、イベントは実行時に定義されます。したがって、それらは異なるものです。

制御できない既存のクラス (フレームワークの一部または自動生成) を拡張するために、部分的なメソッドが描かれました。

お役に立てれば

于 2010-09-02T15:55:26.547 に答える