0

私は自分のメソッドを呼び出すために Web サービスを使用しています。そのメソッドはブール値を返します。cs ファイル内のコードは次のとおりです。

`obj = new GBService.PreGroupbookSreviceSoapClient();
 obj.AddBasicInfoCompleted +=new EventHandler<GBService.AddBasicInfoCompletedEventArgs>(obj_AddBasicInfoCompleted);`

ここで問題になるのは、VS2010 で作成されたこの「obj_AddBasicInfoCompleted」メソッドがデフォルトで void 型を返すことです。この場所に Boole 型のメソッドを生成する必要があります。メソッドの型を void から Boolean または bool に変更すると、VS2010 は上記の行で「bool obj_AddBasicInfoCompleted(object sender, GBService.AddBasicInfoCompletedEventArgs e) has the wrong return type.」というエラーを表示します。

その方法がわかりません。よろしくお願いします。

4

2 に答える 2

2

この場所に Boole 型のメソッドを生成したい。

次に、使用するデリゲート タイプを変更する必要があります...値を返さないためです。EventHandler<TEventArgs>

なぜこれを行う必要があるのか​​についてはあまり語られていませんが、一般に、.NET の通常の規則に反して作業しようとしている場合は、設計を再検討する必要があります。特に、 を期待し、それを使用してイベントを公開する標準コンポーネントを使用しようとしてEventHandler<TEventArgs>いる場合、どのように戻り値を使用することを期待しますか?

于 2012-08-18T20:01:54.850 に答える
0

イベントは、その性質上、通常、戻り値を取得することが実際には (ほとんど) 意味がない状況で使用されるため、それを必要とするものをどのように設計したのか疑問に思います。本質的に間違っていると言っているわけではありませんが、それは非常に異なっており、イベント「システム」がどのように機能するように意図されているかという粒度に反する傾向があります.

これを実際に回避する唯一の方法は、ブール値を返す独自のカスタム イベント ハンドラー デリゲートを宣言してから、必要な場所にその値を取得するための体操を行うことです。VS 2010 は任意に void を返すだけでなく、void を返すデフォルトの EventHandler デリゲート シグネチャを順守します。

これを実行したい理由を共有できれば、この特定の目的を達成する必要性を軽減する設計をいくらか改善する手助けができるかもしれません。

于 2012-08-18T20:20:52.657 に答える