Unity と C# の委任とイベントに関する個人的なメモ

基本的なカスタムデリゲートフォーム:

Public   delegate  void  Delegate(){

}

デリゲートはクラスの参照型です。cpp 関数ポインタに似ています。デリゲートの基本的な使用法は、特定のメソッドを間接的にすばやく呼び出すことです。

C#system ライブラリにはデリゲートが付属しています。

アクション デリゲートには戻り値がありません (void)

Func デリゲートには戻り値が必要です。

デリゲートは、メソッドをパラメーターとして渡すと同時に、デリゲート内の他のメソッドを間接的に呼び出すために使用されることがよくあります。複数のメソッドの高速結合を可能にします。

欠点:

デリゲートのマルチキャストはメモリ リークを引き起こします。デリゲートはメソッドを参照します。メソッドがインスタンス メソッド (非静的メソッド) の場合、このメソッドはオブジェクトに属している必要があります。デリゲートがこのメソッドを参照する場合、このメソッドはオブジェクトはメモリ内に存在する必要があります。このオブジェクトを参照する他の参照変数がない場合でも、このオブジェクトのメモリを解放することはできません。解放されると、メモリはオブジェクトのメソッドを間接的に呼び出すことができなくなるからです。メモリーリーク

また、マルチキャスト委任にはメンテナンスが難しく、すべてのメソッドがリセットされやすく、整合性が低下します。(イベントをデリゲート型フィールドのラッパーとして使用します。)

ネストされた呼び出しは読みにくくなります

.NET では、イベントを宣言するためのデリゲートの命名形式には、イベント名にサフィックス EventerHandle を加えたものを採用することが規定されています。イベント名には EventArgs という接尾辞を付ける必要があり、カスタム イベントは EventArgs から継承する必要があります。

イベントは基本的に、委任されたフィールドのラッパーです。

Public EventHandler onorder; これはデリゲート タイプのフィールドです。

パブリック イベント EventHandler onorder ; これは -= または += でのみアクセスできるイベントで、イベント ハンドラーのサブスクリプションと削除を追加します。短縮された宣言形式は誤解を招きやすいですが、実際には、イベントはデリゲート型または特別なデリゲート型のフィールドではなく、デリゲートのラッパーです。

PS: イベントが空いているかどうかの判断に使用できます。= (糖衣構文)。

完全な宣言形式:

Private EventHandler orderEventHandler;

Pubic event EventHandler Onorder{

  add{

          orderEventHandler+=value;

   }

   remove {

           orderEventHandler-=value;

    }

}

イベントはデリゲート インスタンスを去勢するために使用されます。イベントはイベント ハンドラーの追加と削除のみ可能ですが、値を割り当てることはできません。また、イベントは +=、-= のみで = はできません。また、イベントを外部からトリガーすることはできません。

実際のプロジェクトでは、コード間の結合を減らすためにイベントを使用することが多く、同時に作業負荷を軽減するために複数のより一般的なメソッドの繰り返しの記述を避けます。

追記:今回の唐山事件については個人的な感想ともいえますが、ジェンダー対立、女性の権利、セクハラ、裏社会、暴力的な争いなどをもっと深く考えて、それぞれの考えを持っていただければ幸いです。私は、この事件の被害者が皆に配慮され、法違反者が処罰されることを願うと同時に、大多数のネット民がもっと理性的になってくれることを常に願っています。

おすすめ

転載: blog.csdn.net/qq_62440805/article/details/125242794