C#でパラメータとして関数を渡すには、delegateを使用します。デリゲートは、メソッドに渡される関数の期待される戻り値の型と引数を指定し、コールバックメソッドはこの仕様に準拠しなければなりません。そうしないと、コードはコンパイルされません。
参加者は、一般的に、名前空間内で直接宣言され、形取りされています。たとえば
<access modifier(s)> delegate <return type> <DelegateName>([argument list]);
、C#の引数を取らず、voidを返すfooメソッドのコールバック関数を表すFooCallbackという名前のデリゲートでの
namespace Demo
{
public delegate void FooCallback();
}
FooCallbackパラメータは次のようになり取る関数:
次のようになります
namespace Demo
{
//delegate for a FooCallback method from the previous code block
public delegate void FooCallback();
public class Widget
{
public void BeginFoo(FooCallback callback)
{
}
デリゲートのシグネチャと一致するメソッドがあると仮定すると、その名前をデリゲートパラメータの値として渡すことができます。たとえば、あなたがこのようなStartFoo
メソッドにパラメータとして渡すことができMyFooCallback
という名前の関数を持っていると仮定すると:それは引数を持つデリゲートを定義することは可能ですが
using Demo; //Needed to access the FooDelegate and Widget class.
namespace YourApp
{
public class WidgetUser
{
private Widget widget; //initialization skipped for brevity.
private void MyFooCallback()
{
//This is our callback method for StartFoo. Note that it has a void return type
//and no parameters, just like the definition of FooCallback. The signature of
//the method you pass as a delegate parameter MUST match the definition of the
//delegate, otherwise you get a compile-time error.
}
public void UseWidget()
{
//Call StartFoo, passing in `MyFooCallback` as the value of the callback parameter.
widget.BeginFoo(MyFooCallback);
}
}
}
することは、引数を渡すことはできませんメソッド名と一緒にリスト1は、通常の方法
namespace Demo
{
public delegate void FrobCallback(int frobberID);
//Invalid Syntax - Can't pass in parameters to the delegate method this way.
BeginFrob(MyFrobCallback(10))
}
デリゲートは、パラメータを指定し、デリゲートを呼び出すメソッドを呼び出すんとしては、デリゲートに必要とされる引数を取り、それが呼び出されたときに、デリゲートメソッドに渡します:
BeginFrob(MyFrobCallback, 10)
BeginFrob方法は、このような10のfrobberID値に渡されたとMyFrobCallbackを呼び出します:
public void BeginFrob(FrobCallback callback, int frobberID)
{
//...do stuff before the callback
callback(frobberID);
}
Lambda Expressionsは、あなたがそれはむしろ明示的に必要とするよりも、使用されるメソッドを定義することができますそれを要約すると
BeginFoo((int frobberID) => {your callback code here;});
を宣言し、代表団は、OTに渡す方法するための手段でありますパラメータとしての彼女の方法。
完璧、例のおかげで。ちょうどそれが働いた:) –