2

いくつかのメソッドを含むライブラリがあり、特定のエラー中に、呼び出し元によって定義されたメソッドを呼び出す必要があります。このメソッドは bool を返さなければなりません。つまり、次のとおりです。

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

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

これは、デリゲートが設計されているようなものに思えますが、なんらかの理由で、デリゲートが実際に何をしているのか、何が渡されているのか、後でそれをどのように実行するのかなど、私には理解できないようです。これを処理する私の現在の方法は愚かで面倒なので、どんな助けも大歓迎です.

編集:少し明確にさせてください。sock.OnSpecificError(method) は、単純に sock にメソッドを渡すために使用されます。メソッドは格納されますが、実行はされません。アイデアは、後で、sock が他のメソッドを実行しているときにエラーが発生した場合は、そのメソッドを実行する必要があるということです。後で使用するためにメソッドを保持し、必要に応じて実行したいと考えています。

4

1 に答える 1

3

デリゲートから始める最も簡単な方法は、事前定義されたデリゲートを使用することです。たとえば、引数をとらずにaを返すデリゲートboolFunc<bool>stringaと、を取り、aintを返すデリゲートは、などにboolなりますFunc<string,int,bool>

メソッドは次のように定義します。

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

OnSpecificErrorこれで、次のように呼び出すことができます。

sock.OnSpecificError(CheckForErrors);

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

次のように、ラムダを使用して小さなメソッドをインライン化することもできます。

sock.OnSpecificError(() => errorCode.Equals("YES"));
于 2012-04-26T21:32:50.810 に答える