ホームページ >バックエンド開発 >C#.Net チュートリアル >C# での委任、イベント、非同期の使用法についての簡単な紹介
この記事では主に C# における委任、イベント、非同期に関する関連知識を紹介します。非常に良い基準値を持っています。以下のエディターで見てみましょう
私が初めて C# プログラミングに触れてから約 1 年が経ちました。学習の過程では常に逆説的なことが多く、私もつい最近まで理解できませんでした。
この記事では、まず使用方法を紹介し、次に機能を評価します。
1. デリゲート
基本的な使用法:
1. デリゲートの型を宣言します。デリゲートは「クラス」のようなものです。デリゲートを宣言した後、この特性を持つ複数のデリゲートを作成できます。 (機能とは戻り値とパラメーターの型を指します)
public delegate void SomeKindOfDelegate(<a href="http://www.php.cn/wiki/57.html" target="_blank">string) <code>public delegate void SomeKindOfDelegate(<a href="http://www.php.cn/wiki/57.html" target="_blank">string</a> result);
2.创建一个在1中创建的委托类型的委托。
public SomeKindOfDelegate aDelegate;
3.为2中创建的具体的委托添加响应函数。响应函数必须符合1中的‘特征'。
aDelegate +=new SomeKindOfDelegate(aFunctionThatJustForDelegate); private void aFunctionThatJustForDelegate(string result) { MessageBox.Show(result); }
4.完成以上三步之后,就可以使用Invoke来对委托进行调用了。Invoke可以选择调用的目标函数,调用优先级,以及调用的参数。
aDelegate.BeginInvoke("Hello~I'm being invoked!", null, null);
上面是基本用法,除了这种基本用法之外,还可以结合var、匿名委托、lambda委托等方法。
完整代码:
namespace wtfIsDelegate { public delegate void SomeKindOfDelegate(string result); public partial class Form1 : Form { public event SomeKindOfDelegate aDelegate; public Form1() { InitializeComponent(); aDelegate +=new SomeKindOfDelegate(aFunctionThatJustForDelegate); aDelegate.BeginInvoke("Hello~I'm being invoked!", null, null); } private void btnDelegate_Click(object sender, EventArgs e) { } private void aFunctionThatJustForDelegate(string result) { MessageBox.Show(result); } } }
委托的用处:
委托的优点,是可以实现异步(BeginInvoke),还可以在某种需要同时调用多个同参数、返回值的情况下简化代码。
二、事件
基本用法:
1.定义委托。
public delegate void SomeKindOfDelegate(string result);
2.定义事件。
public event SomeKindOfDelegate aDelegate;
3.为事件添加响应函数。
process.Exited += new EventHandler(CmdProcess_Exited);
result);
2. 1.で作成したデリゲートタイプのデリゲートを作成します。
public SomeKindOfDelegate aDelegate;
3. 2 関数
process.Exited += new EventHandler(CmdProcess_Exited); // 注册进程结束事件 。4. 上記の 3 つの手順を完了したら、Invoke を使用してデリゲートを呼び出すことができます。 Invoke では、呼び出すターゲット関数、呼び出しの優先順位 および呼び出しのパラメータを選択できます。
aDelegate.BeginInvoke("こんにちは〜呼び出されています!", null, null);
上記は基本的な使い方です。この基本的な使い方に加えて、var を組み合わせることができます。匿名委任、ラムダ委任、その他のメソッド。
完全なコード: public delegate void DataReceivedEventHandler(object sender, DataReceivedEventArgs e);
委任の使用:
2. イベント
1. 委任を定義します。public delegate void SomeKindOfDelegate(string result);
2. イベントを定義します。
public event SomeKindOfDelegate aDelegate;
3. イベントに応答関数を追加します。
process.Exited += new EventHandler(CmdProcess_Exited);
4. イベントのトリガー (呼び出し) メソッドを指定します。 ([トリガーせずに直接呼び出すこともできます]) 説明:
C# では、各種類の「イベント」はおそらくその「🎜イベント ハンドラー🎜EventHandler」に対応します。たとえば、Process クラスの OutputDataReceived イベントは DataReceivedEventHandler に対応します。PasswordChanged などの非特定の「イベント」の場合、それらはすべて RoutedEventHandler や EventHandler などのより一般的な「イベント ハンドラー」に対応します。ただし、「EventHandler」は仲介として機能するだけです。「Event」が実際にトリガーされた後に何をするかは、次のように手動で指定する必要があります: 🎜rrreee🎜EventHandler もデリゲートです。例えば、🎜🎜rrreee🎜🎜カスタムイベント🎜🎜🎜🎜カスタムイベントは、ある意味でプログラムの流れを変える手法であり、ある条件の変化は「継続的なクエリ」によって決定されます。 ' '「サブスクリプションと処理」の関係に変換されました。 🎜🎜カスタム イベントには次の要素が必要です: 🎜🎜イベントの開始者、イベントのサブスクリプション、およびイベントのハンドラー。パラメーターはイニシエーターからハンドラーに渡すことができます。 🎜🎜イベントの「開始」は、「🎜OnKeyDown🎜」、「OnMouseClick」([このように書かれたソースコードを見たことがありません])などの特定のシステムメッセージ、または特定の条件が満たされた場合(たとえば、同じ文字を 2 回入力すると、その文字が自動的に呼び出されます (実際には、システム メッセージを受信することを「条件達成」とみなすこともできます)。 [他のイベントはこのように書かれています]🎜🎜一部のイベントには明確な「開始者」がありません。 🎜🎜🎜委任とイベントの関係は何ですか? 🎜🎜🎜委任とカスタム イベントの使用法は非常に似ています。イベントはクラス内でのみ呼び出すことができます。デリゲートの場合はどこでも呼び出すことができます。呼び出し方法が少し違うようです(パラメータの受け渡し方法)🎜🎜呼び出し方法とパラメータの受け渡しの違いにより、イベントはより保守的/安定しているようです。また、出来事は「理解」しやすくなり、受け入れやすくなります。 🎜🎜Delegate は非同期 (呼び出し開始) によく使用されるようです。 Event はカスタム イベントによく使用されます。 🎜🎜🎜委任と非同期の関係は何ですか? 🎜🎜🎜非同期は委任が実現できる機能です (または「現象」と呼ぶこともできます)。非同期はマルチスレッド (スレッド、スレッドプール、タスクなど))。 🎜以上がC# での委任、イベント、非同期の使用法についての簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。