問題タブ [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.

0 投票する
1 に答える
124 参照

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

結局、これは重複の可能性があるようですが、この結論に到達するのはかなりの旅でした:)。

0 投票する
2 に答える
501 参照

c# - パイプラインを使用する場合は常に非同期

すべてのステージで使用して実行する多くのステージを持つパイプラインを使用するアプリケーションがあり、次foreachを呼び出す場合:

インターフェイスは次のとおりです。

基本的にはコンテキストを受け取り、よりリッチになったコンテキストを返します。

ステージExecuteメソッドの 1 つの中で、サービスを呼び出す必要があり、非同期を実行したいと考えています。したがって、Executeメソッドを次のように変更する必要があります

サービスへawaitの呼び出しのために。

他のすべてのステージには非同期コードはありませんが、ベスト プラクティスは「ずっと非同期」であるため、今すぐ変更する必要があります。

非同期コードを導入するときにこれらの変更を行わなければならないのは普通ですか?