目次
委任を使用するのはどのような場合ですか?
1) デリゲートの型を宣言する必要があります。
3) デリゲート インスタンスを作成する必要があります。
4) デリゲート インスタンスを呼び出す必要があります。
デリゲートの結合と削除
1. 組み合わせ
2. 削除
概要
出力

C# の委任の概念を説明する

Aug 31, 2023 pm 09:17 PM

C# の委任の概念を説明する

C プログラマーであれば、デリゲートを関数へのポインターとして考えることができます。ただし、C# のデリゲートは単なる関数ポインターではありません。この記事では、委任の概念と日常のプログラミングでのその使用法について説明します。

本質的に、委任はある程度の間接性を提供します。これらは、タイプセーフな方法で受け渡しおよび実行できるコードの一部をカプセル化します。動作はすぐに実行されるのではなく、オブジェクト内に含まれます。このオブジェクトに対していくつかの操作を実行できます。その 1 つは、包含された動作を実行することです。

デリゲートを使用すると、高階関数、つまり関数をパラメーターとして受け取ったり、関数を戻り値として返したりできる関数を作成できます。デリゲート型は、デリゲートが表現できるメソッド シグネチャ、特にメソッドの戻り値の型とそのパラメーターの型を定義します。次の例では、Transformer は整数を受け入れて返す任意のメソッドを表すことができるデリゲートです。

delegate int Transformer(int x);
ログイン後にコピー

署名を満たす任意のメソッド (ラムダ、インスタンス、静的メソッドを含む) を Transformer インスタンスに割り当てることができます。例: -

Transformer square = x => x * x;
Transformer cube = x => x * x * x;

Console.WriteLine(square(3)); // prints 9
Console.WriteLine(cube(5)); // prints 125
ログイン後にコピー

委任を使用するのはどのような場合ですか?

デリゲートは通常、特定の操作を実行したいコードがその操作の詳細は知らないが、その操作のインターフェイスは知っている場合に使用されます。

プログラミングでは、特定の操作を実行する必要があるが、その操作を実行するためにどのメソッドを呼び出すかが事前にわからないという状況によく遭遇します。デリゲートは、動作をデリゲートに置き換えてから、コンテキストや状況に応じて適切な動作を持つデリゲートの具体的なインスタンスを渡すことで、この問題を解決するのに役立ちます。

デリゲートが何かを行うには、4 つのことが起こる必要があります -

1) デリゲートの型を宣言する必要があります。

デリゲート型は本質的に、それが表す関数の定義です。つまり、デリゲート型は、パラメーター、関数が受け入れる型、および関数が返す戻り値の型で構成されます。

たとえば、入力として 2 つの数値を受け取り、数値を返すメソッドを表すデリゲート型は、次のように宣言できます。 -

delegate int Processor(int numOne, int numTwo);
ログイン後にコピー

プロセッサは、クラスによって作成される型と同様の型です。 。このタイプのインスタンスを作成するには、2 つの数値を入力として受け入れ、ブール値を返すメソッドが必要です。

2) 実行されるコードはメソッドに含まれている必要があります。

上記のデリゲート型とまったく同じシグネチャを持つメソッドを定義し、実行時の状況に応じて必要な処理を実行します。たとえば、次のメソッドはいずれも 2 つの数値を受け取り、1 つの数値を返すため、Processor インスタンスの作成に使用できます。

static int Add(int numOne, int numTwo){
   Return numOne + numTwo;
}
static int Subtract(int numOne, int numTwo){
   Return numOne - numTwo;
}
ログイン後にコピー

3) デリゲート インスタンスを作成する必要があります。

デリゲート型と正しいシグネチャを持つメソッドを取得したので、そのデリゲート型のインスタンスを作成できます。これを行うときは、基本的に、デリゲート インスタンスが呼び出されたときにこのメソッドを実行するように C# コンパイラーに指示します。

Processor processorOne = new Processor(Add);
Processor processorTwo = new Processor(Subtract);
ログイン後にコピー

上の例では、デリゲート インスタンスを作成するのと同じクラスで Add メソッドと Subtract メソッドが定義されていることを前提としています。これらのメソッドが別のクラスで定義されている場合は、そのクラスのインスタンスが必要になります。

4) デリゲート インスタンスを呼び出す必要があります。

これは、当然のことながら Invoke という名前のデリゲート インスタンスのメソッドを呼び出すだけです。デリゲート インスタンスのこのメソッドは、デリゲート型宣言で指定されたものと同じパラメーター リストと戻り値の型を持ちます。 Invoke を呼び出すと、デリゲート インスタンスの操作が実行されます。

int sum = processorOne.Invoke(3, 5);
ログイン後にコピー

ただし、C# を使用すると、それがはるかに簡単になります。デリゲート インスタンスは、メソッド自体であるかのように直接呼び出すことができます。たとえば、

int difference = processorTwo(10, 6);
ログイン後にコピー

デリゲートの結合と削除

単一のデリゲート インスタンス呼び出しで一連の異なる操作を実行したい場合、C# を使用するとこれが可能になります。システム。デリゲート型には、Combine と Remove という 2 つの静的メソッドがあります。

1. 組み合わせ

引数として渡されたデリゲートの呼び出しリストを連結した呼び出しリストを持つ新しいデリゲートを作成します。新しいデリゲート インスタンスが呼び出されると、そのすべての操作が順番に実行されます。

public static Delegate Combine(params Delegate[] delegates); // OR
public static Delegate Combine(Delegate a, Delegate b);
ログイン後にコピー

呼び出しリスト内のいずれかの操作で例外がスローされた場合、後続の操作は実行できなくなります。

2. 削除

デリゲートの呼び出しリストの最後の出現を、別のデリゲートの呼び出しリストから削除します。ソース呼び出しリストを取得し、値呼び出しリストの最後の出現を削除することによって形成された呼び出しリストを含む新しいデリゲートを返します。

public static Delegate Remove(Delegate source, Delegate value);
ログイン後にコピー

概要

  • デリゲートは、単一メソッド インターフェイスと同様に、特定の型とパラメーターのセットを使用して動作をカプセル化します。

  • デリゲート型宣言によって記述された型シグネチャによって、デリゲート インスタンスと呼び出しのシグネチャの作成にどのメソッドを使用できるかが決まります。

  • デリゲート インスタンスを作成するには、デリゲートが呼び出されたときに実行するメソッドが必要です。

  • デリゲート インスタンスは文字列と同様に不変です。

  • 各デリゲート インスタンスには、呼び出しリスト、つまり操作のリストが含まれています。

  • デリゲート インスタンスは、相互に結合したり、削除したりできます。

  • リアルタイム デモンストレーション

    using System;
    class Program{
       delegate int Transformer(int x);
       delegate int Processor(int numOne, int numTwo);
       static void Main(){
          Transformer square = x => x * x;
          Transformer cube = x => x * x * x;
          Console.WriteLine(square(3)); // prints 9
          Console.WriteLine(cube(5)); // prints 125
          Processor processorOne = new Processor(Add);
          Processor processorTwo = new Processor(Subtract);
          int sum = processorOne.Invoke(3, 5);
          Console.WriteLine(sum); // prints 8
          int difference = processorTwo(10, 6);
          Console.WriteLine(difference); // prints 4
       }
       static int Add(int numOne, int numTwo){
          return numOne + numTwo;
       }
       static int Subtract(int numOne, int numTwo){
          return numOne - numTwo;
       }
    }
    ログイン後にコピー

    出力

    9
    125
    8
    4
    ログイン後にコピー

    以上がC# の委任の概念を説明するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

C文字列におけるcharの役割は何ですか C文字列におけるcharの役割は何ですか Apr 03, 2025 pm 03:15 PM

Cでは、文字列でCharタイプが使用されます。1。単一の文字を保存します。 2。配列を使用して文字列を表し、ヌルターミネーターで終了します。 3。文字列操作関数を介して動作します。 4.キーボードから文字列を読み取りまたは出力します。

C言語で特殊文字を処理する方法 C言語で特殊文字を処理する方法 Apr 03, 2025 pm 03:18 PM

C言語では、以下などのエスケープシーケンスを通じて特殊文字が処理されます。\ nはラインブレークを表します。 \ tはタブ文字を意味します。 ESACEシーケンスまたは文字定数を使用して、Char C = '\ n'などの特殊文字を表します。バックスラッシュは2回逃げる必要があることに注意してください。さまざまなプラットフォームとコンパイラが異なるエスケープシーケンスを持っている場合があります。ドキュメントを参照してください。

C言語のcharとwchar_tの違い C言語のcharとwchar_tの違い Apr 03, 2025 pm 03:09 PM

C言語では、charとwchar_tの主な違いは文字エンコードです。CharはASCIIを使用するか、ASCIIを拡張し、WCHAR_TはUnicodeを使用します。 Charは1〜2バイトを占め、WCHAR_Tは2〜4バイトを占有します。 charは英語のテキストに適しており、wchar_tは多言語テキストに適しています。 CHARは広くサポートされており、WCHAR_TはコンパイラとオペレーティングシステムがUnicodeをサポートするかどうかに依存します。 CHARの文字範囲は限られており、WCHAR_Tの文字範囲が大きく、特別な機能が算術演算に使用されます。

C言語でさまざまなシンボルを使用する方法 C言語でさまざまなシンボルを使用する方法 Apr 03, 2025 pm 04:48 PM

c言語のシンボルの使用方法は、算術、割り当て、条件、ロジック、ビット演算子などをカバーします。算術演算子は基本的な数学的操作に使用されます。割り当てと追加、下位、乗算、除算の割り当てには、条件操作に使用されます。ポインター、ファイル終了マーカー、および非数値値。

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

C言語でCharを変換する方法 C言語でCharを変換する方法 Apr 03, 2025 pm 03:21 PM

C言語では、charタイプの変換は、キャスト:キャスト文字を使用することにより、別のタイプに直接変換できます。自動タイプ変換:あるタイプのデータが別のタイプの値に対応できる場合、コンパイラは自動的に変換します。

C言語合計の機能は何ですか? C言語合計の機能は何ですか? Apr 03, 2025 pm 02:21 PM

C言語に組み込みの合計機能はないため、自分で書く必要があります。合計は、配列を通過して要素を蓄積することで達成できます。ループバージョン:合計は、ループとアレイの長さを使用して計算されます。ポインターバージョン:ポインターを使用してアレイ要素を指し示し、効率的な合計が自己概要ポインターを通じて達成されます。アレイバージョンを動的に割り当てます:[アレイ]を動的に割り当ててメモリを自分で管理し、メモリの漏れを防ぐために割り当てられたメモリが解放されます。

C言語でchar配列の使用方法 C言語でchar配列の使用方法 Apr 03, 2025 pm 03:24 PM

Char Arrayは文字シーケンスをC言語で保存し、char array_name [size]として宣言されます。アクセス要素はサブスクリプト演算子に渡され、要素は文字列のエンドポイントを表すnullターミネーター「\ 0」で終了します。 C言語は、strlen()、strcpy()、strcat()、strcmp()など、さまざまな文字列操作関数を提供します。

See all articles