C#デリゲートの使い方を詳しく解説(デリゲート)
1. 委任とは何ですか?
実は、デリゲーションについてもっと徹底的に説明する方法をずっと考えていました。正直に言うと、問題をさまざまな角度から見ているので、人それぞれ意見が異なります。個人的には、以下の2点から理解できるのではないかと考えています:
(1) データ構造的には、デリゲーションはクラスと同様のユーザー定義型です。
(2) デザインパターンの観点から見ると、デリゲート (クラス) はメソッド (オブジェクト) の抽象化を提供します。
デリゲートは型なので、どのようなデータを保存するのでしょうか?
デリゲートはメソッドの抽象化であり、同じシグネチャと戻り値の型を持つ一連のメソッドのアドレスを格納することがわかっています。デリゲートが呼び出されると、デリゲートに含まれるすべてのメソッドが実行されます。
2. デリゲート型の定義
クラスが型であるのと同じように、デリゲートも型です。クラスと同様、デリゲート型は、変数や型オブジェクトの作成に使用する前に宣言する必要があります。
delegate void MyDel(int x);
デリゲート型宣言:
(1) delegateキーワードで始まります。
(2) 戻り値の型 + デリゲートの型名 + パラメーターのリスト。
delegate void MyDel(int x);
3. デリゲート変数を宣言する
4. デリゲート変数を初期化する
(1) 新しい演算子を使用する
新しい演算子のオペランドの構成は次のとおりです:
デリゲート型名
括弧内には、呼び出しリストの最初のメンバーとしてメソッドの名前が含まれます。メソッドには、インスタンス メソッドまたは静的メソッドを指定できます。
MyDel del1,del2;
(2) メソッド指定子のみで構成されるショートカット構文
クイックキー構文を使用します。これが機能するのは、メソッド名とそれに対応するデリゲート型の間に暗黙的な変換があるためです。
del1 = new MyDel( myInstObj.MyM1 ); del2 = new MyDel( SClass.OtherM2 );
5. デリゲートの代入
デリゲートは参照型なので、値を代入することでデリゲート変数に含まれるメソッドのアドレス参照を変更できます。古い参照はガベージ コレクターによって再利用されます。
del1 = myInstObj.MyM1; del2 = SClass.OtherM2;
6. デリゲートの結合
追加の演算子を使用してデリゲートを結合できます。この操作は最終的に、2 つのオペランドのデリゲート呼び出しリストのコピーを連結した呼び出しリストを持つ新しいデリゲートを作成します。
デリゲートは定数であり、オペランド デリゲートは作成後に変更されません。デリゲートの組み合わせはオペランドのコピーをコピーします。
MyDel del; del = myInstaObj.MyM1; //委托初始化del = SClass.OtherM2;//委托重新赋值,旧的引用将被回收
7. デリゲートの加算および減算演算
+= 演算子を使用して、デリゲートに新しいメソッドを追加できます。
-= 演算子を使用してデリゲートからメソッドを削除することもできます。
MyDel del1 = myObj.MyMethod; MyDel del2 = SClass.OtherM2; MyDel del3 = del1 + del2; //组合调用列表
8. デリゲート呼び出し
デリゲート呼び出しはメソッド呼び出しと似ています。デリゲートが呼び出された後、呼び出しリスト内の各メソッドが実行されます。
デリゲートを呼び出す前に、デリゲートが空かどうかを判断する必要があります。空のデリゲートを呼び出すと例外がスローされます。
MyDel del = myObj.MyMethod; del += SClass.OtherM2; // 增加方法 del -= myObj.MyMethod; // 移除方法
9. 匿名メソッド
匿名メソッドは、デリゲートの初期化時にインラインで宣言されるメソッドです。
基本構造:
if(null != del) { del();//委托调用 }
例:
deleage( 参数 ) { 语句块 }
上記から、匿名メソッドは戻り値を宣言していないことがわかります。
10. ラムダ式
Lambda表达式主要用来简化匿名方法的语法。在匿名方法中,delegate关键字有点多余,因为编译器已经知道我们将方法赋值给委托。通过几个简单步骤,我们就可以将匿名方法转换为Lambda表达式:
删除delegate关键字
在参数列表和匿名方法主体之间防Lambda运算符=>。Lambda运算符读作"goes to"。
MyDel del = delegate( int x) { return x; };//匿名方法 MyDel del2 = (int x) => {return x;};//Lambda表达式 MyDel del3 = x => {return x};//简写的Lambda表达式

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C#.NETインタビューの質問と回答には、基本的な知識、コアの概念、高度な使用が含まれます。 1)基本知識:C#は、Microsoftが開発したオブジェクト指向言語であり、主に.NETフレームワークで使用されています。 2)コアの概念:委任とイベントは動的な結合方法を可能にし、LINQは強力なクエリ関数を提供します。 3)高度な使用:非同期プログラミングは応答性を向上させ、式ツリーは動的コード構造に使用されます。

C#は、Microsoftによって開発された最新のオブジェクト指向プログラミング言語であり、.NETフレームワークの一部として開発されています。 1.C#は、カプセル化、継承、多型を含むオブジェクト指向プログラミング(OOP)をサポートしています。 2。C#の非同期プログラミングは非同期を通じて実装され、適用応答性を向上させるためにキーワードを待ちます。 3. LINQを使用してデータ収集を簡潔に処理します。 4.一般的なエラーには、null参照の例外と、範囲外の例外インデックスが含まれます。デバッグスキルには、デバッガーと例外処理の使用が含まれます。 5.パフォーマンスの最適化には、StringBuilderの使用と、不必要な梱包とボクシングの回避が含まれます。

C#.NETアプリケーションのテスト戦略には、ユニットテスト、統合テスト、エンドツーエンドテストが含まれます。 1.単位テストにより、コードの最小ユニットがMSTEST、ヌニット、またはXUNITフレームワークを使用して独立して動作することを保証します。 2。統合テストでは、一般的に使用されるシミュレートされたデータと外部サービスを組み合わせた複数のユニットの機能を検証します。 3.エンドツーエンドのテストでは、ユーザーの完全な操作プロセスをシミュレートし、通常、セレンは自動テストに使用されます。

c#.netisversatileforbothwebanddesktopdevelopment.1)forweb、useasp.netfordynamicapplications.2)fordesktop、equindowsorwpfforrichinterfaces.3)usexamarinforcross-platformdeveliment、enabling deshacrosswindows、

C#.NETは、複数のアプリケーション開発をサポートする強力なツールとライブラリを提供するため、依然として重要です。 1)C#は.NETフレームワークを組み合わせて、開発を効率的かつ便利にします。 2)C#のタイプの安全性とゴミ収集メカニズムは、その利点を高めます。 3).NETは、クロスプラットフォームの実行環境とリッチAPIを提供し、開発の柔軟性を向上させます。

C#シニア開発者とのインタビューでは、非同期プログラミング、LINQ、.NETフレームワークの内部作業原則などのコア知識をマスターする必要があります。 1.非同期プログラミングは、非同期を通じて操作を簡素化し、アプリケーションの応答性を向上させるのを待ちます。 2.LinqはSQLスタイルでデータを操作し、パフォーマンスに注意を払います。 3.ネットフレームワークのCLRはメモリを管理し、ガベージコレクションに注意して使用する必要があります。

c#.netissuitableforenterprise-levelApplicationsとsystemduetoitsSystemdutyping、richlibraries、androbustperformance.

C#は、エンタープライズレベルのアプリケーション、ゲーム開発、モバイルアプリケーション、Web開発で広く使用されています。 1)エンタープライズレベルのアプリケーションでは、C#がasp.netcoreにWebAPIを開発するためによく使用されます。 2)ゲーム開発では、C#がUnityエンジンと組み合わされて、ロールコントロールやその他の機能を実現します。 3)C#は、コードの柔軟性とアプリケーションのパフォーマンスを改善するために、多型と非同期プログラミングをサポートします。
