2012-04-26 12 views
2

いくつかのメソッドを持つライブラリがありますが、特定のエラーが発生している間は、呼び出し元が定義したメソッドを呼び出す必要があります。このメソッドはboolを返す必要があります。私が意味することは次のとおりです:メソッドを後で呼び出せるように、メソッドを引数として渡しますか?

Sock sock = new Sock(); 
sock.OnSpecificError(theMethodToCall); 

エラーが発生すると、まずOnSpecificErrorが設定されているかどうかを確認する必要があります。それがある場合、それはそれを実行する必要があります。メソッドがfalseを返した場合、またはOnSepcificErrorが設定されていない場合、例外がスローされます。

これは、代理人が設計されているようなものですが、何らかの理由で、実際に何をしているのか、何が渡されているのか、どうすれば後でそれを実行してください。私の現在のこれを処理する方法は愚かで面倒なので、どんな助けでも大歓迎です。

編集: 少し明確にしてください。 sock.OnSpecificError(メソッド)は単に格納するが、実行されないメソッドを単にsockに渡すために使用されます。アイデアは後で、ソックスはいくつかの他のメソッドを実行していますが、エラーがポップアップした場合は、そのメソッドを実行する必要があります。私は後で使用するためにメソッドを保持し、必要に応じて実行します。

答えて

3

デリゲートを開始する最も簡単な方法は、あらかじめ定義されたものを使用することです。たとえば、引数を取らずにboolを返すデリゲートはFunc<bool>になります。 stringintがあり、boolを返すデリゲートはFunc<string,int,bool>となります。あなたは今、このようなOnSpecificErrorを呼び出すことができます

void OnSpecificError(Func<bool> errorCheck) { 
    // Do your stuff... 
    var gotErrors = errorCheck(); 
    if (gotErrors) { 
     // Do something about it 
    } 
} 

sock.OnSpecificError(CheckForErrors); 

private bool CheckForErrors() { 
    return errorCode.Equals("YES"); 
} 

ます。また、このような小さな方法を、インライン化するラムダを使用することができます。

あなたはこのようなあなたの方法を定義します

sock.OnSpecificError(() => errorCode.Equals("YES")); 
+0

さて、私はこれを得ると思います。私はそれを持っていることを確認してください。だからFunc <>はあらかじめ定義されたデリゲートですか? <>はC#の世界ではどういう意味ですか?私はgoogle <> – cost

+0

実際には、これは私が探しているものではない、しようとすると私は良いの答えを得ることはできませんでした。私の答えに行った編集を見て、私は明確にしようとしました。 – cost

+0

@cost '<>'は*汎用引数*の場所です。 'Func <>'はあらかじめ定義されたジェネリックデリゲート型のファミリーです。 1つまたは複数の型引数を指定して、デリゲートのパラメータ型と戻り値の型を示すことによって、この型を拡張できます。 – dasblinkenlight

関連する問題