問題タブ [default-interface-member]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
resharper - C# 8.0 の実装クラスでインターフェイス メソッドの既定の実装の一部を保持する方法は?
C#8.0では、次のことができるはずだと思うでしょう(これによると(最初のスニペット)):
インターフェイス メンバーを明示的かつ完全に実装する必要があるため (既定のロジックを提供するメソッドを含む)、上記の例はコンパイルされません。
したがって、次のように動作するはずです。
いいえ、このメソッドは (アップキャストにもかかわらず) 再帰的であるように見え、お気に入りのStack Overflow
例外が発生します。
だから私の質問は(私の例でデザインを変更できるという事実から要約して)、できればハッキーまたは静的ヘルパー拡張メソッドに頼る必要なしに、特定のメソッドのデフォルトの実装を維持する方法はありますか? インターフェイスとクラスの両方で静的拡張メソッドを呼び出すことはできますが、この機能の目的を無効にします。
// 編集
私はそれが私を混乱させていることを認めなければなりません. 問題がコード固有のものであるとは考えていなかったため、追加情報を提供しませんでした。この簡単な例を見てみましょう (投稿の冒頭でリンクした Web サイトから取得):
@Panagiotis Kanavos
コメントによるとNo, default members don't need to be implemented (...)
、私がスクリーンショットしたものは真実ではないはずです。教えてください。
// 編集 2
ご覧のとおり、 で適切にターゲティング.NET CORE 3.0
していC# 8.0
ます。
エラー:
Interface method cannot declare a body
Interface member 'void CryptoBotCoreMVC.IDefaultInterfaceMethod.DefaultMethod()' is not implemented
コメントの質問に答えるには:ファイルLangVersion
で明示的に指定しませんでした。.csproj
// 編集 3
問題は ReSharper でした。参照: https://stackoverflow.com/a/58614702/3783852
おそらく回答の所有者によってコメントが削除されたので、ここに書きます。手がかりは、実際にはエラー番号がなかったという事実でしたが、コンパイルはブロックされました。でこれらのエラーが発生した場合、コンパイルをブロックするオプションがあることが判明しましたReSharper
。
結局、これは重複の可能性があるようですが、この結論に到達するのはかなりの旅でした:)。
c# - パイプラインを使用する場合は常に非同期
すべてのステージで使用して実行する多くのステージを持つパイプラインを使用するアプリケーションがあり、次foreach
を呼び出す場合:
インターフェイスは次のとおりです。
基本的にはコンテキストを受け取り、よりリッチになったコンテキストを返します。
ステージExecute
メソッドの 1 つの中で、サービスを呼び出す必要があり、非同期を実行したいと考えています。したがって、Execute
メソッドを次のように変更する必要があります
サービスへawait
の呼び出しのために。
他のすべてのステージには非同期コードはありませんが、ベスト プラクティスは「ずっと非同期」であるため、今すぐ変更する必要があります。
非同期コードを導入するときにこれらの変更を行わなければならないのは普通ですか?