C〓〓中の依頼は何に使いますか?
1992 ワード
C〓〓の中で私達は1つの概念を耳にすることができます.依頼は何の鬼ですか?何に使いますか?最近は暇な時にC〓の依頼に関する知識を書いています.開門して山を見て、実はC〓の中の委託は伝達のコールバック関数を実現するために用います.他の言語では、は、関数または方法としての容器を委託する以上、強いタイプのCピラーには、関数または方法および委託が同じ構造を有する必要がある(すなわち、委託は、関数または方法と同じパラメータリストおよび同じ返却値が必要である). は、関数または方法としてのコンテナに委託しており、一つの依頼は、複数の関数または方法を収容することができる.この依頼を呼び出すときは、この依頼の各方法を順次呼び出します.具体的にはマイクロソフトの公式文書を参照することができます.
javascript
のように、関数の中にあるコールバック関数を伝達すると、この関数が対応する動作を実行した後に、過去のコールバック関数を呼び出すことができます.javascript
でこれを実現するのは簡単です.コールバックが必要な関数名を伝達するだけでいいです.しかし、C#
では違っています.C#
は強いタイプの言語だと知っています.関数のパラメータは厳密なタイプが必要です.また、直接関数を別の関数として使用するパラメータも許されない.できるとしても、このコールバック関数の型はどうやって説明しますか?このような気まずい状況の下に生まれたリプライです.下のコードを見てみます.もしjavascript
の論理でコードを書くなら、コードはこうなるべきです.using System;
namespace Test
{
class Test
{
public Test()
{
Calculate(23, 45, ShowText);
}
public void Calculate(int num1, int num2, callback)
{
int sum = num1 + num2;
callback(sum.ToString());
}
public void ShowText(string text)
{
Console.WriteLine(text);
}
}
}
しかし、ShowText
という関数名を直接Calculate
に渡す方法は明らかにCピラーではエラーが発生します.私たちはこの時に依頼を使う必要があります.そこで私たちは一つの依頼を追加しました.次のようにします.using System;
namespace Test
{
class Test
{
public Test()
{
ShowTextDel showTextDel = ShowText; // , 。
Calculate(23, 45, showTextDel);
}
public void Calculate(int num1, int num2, ShowTextDel callback)
{
int sum = num1 + num2;
callback(sum.ToString());
}
// `string` `void` 。
public delegate void ShowTextDel(string text);
public void ShowText(string text)
{
Console.WriteLine(text);
}
}
}
依頼があればdelegate
でコールバック関数を伝達することができます.ただし、依頼には以下のような注意点があります.