問題タブ [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.
c# - C#で「特性」デザインパターンをどのように実装しますか?
この機能がC#に存在しないことは知っていますが、PHPは最近、Traitsという機能を追加しました。これは、私が考え始めるまで、最初は少しばかげていると思いました。
と呼ばれる基本クラスがあるとしClient
ます。Client
と呼ばれる単一のプロパティがありますName
。
現在、さまざまな顧客が使用する再利用可能なアプリケーションを開発しています。すべての顧客は、クライアントに名前を付ける必要があることに同意します。したがって、それは基本クラスに含まれます。
ここで、顧客Aがやって来て、クライアントの体重も追跡する必要があると言います。顧客Bは体重を必要としませんが、身長を追跡したいと考えています。顧客Cは、体重と身長の両方を追跡したいと考えています。
特性を使用すると、WeightとHeightの両方の機能特性を作成できます。
これで、クラスに余分な毛羽立ちを追加することなく、すべての顧客のニーズを満たすことができます。顧客が後で戻ってきて、「ああ、私はその機能が本当に好きです、私もそれを持っていてもいいですか?」と言った場合、私はクラス定義を更新して追加の特性を含めます。
C#でこれをどのように達成しますか?
プロパティと関連するメソッドの具体的な定義が必要であり、クラスのバージョンごとにそれらを再実装したくないため、インターフェイスはここでは機能しません。
(「顧客」とは、私を開発者として雇った文字通りの人を意味しますが、「クライアント」とは、プログラミングクラスを指します。各顧客には、情報を記録したいクライアントがいます)
c# - C# 8 の既定のインターフェイス メソッド
次のコード例を検討してください。
コードの使用:
私の問題はコードにあります:
問題は次のとおりです。出力は15または55である必要があります。
.NET チームによると:
決定: 2017 年 4 月 11 日作成: I2.M を実行します。これは、実行時に明確に最も具体的なオーバーライドです。
オーバーライドされたインターフェイスのキーワード「new」が原因で、ここではわかりません。正しい動作は何ですか?
ソースからコンパイルする必要がある場合は、 https ://github.com/alugili/Default-Interface-Methods-CSharp-8 からソース コードをダウンロードできます 。
c# - C# 8 プレビューの抽象インターフェイス メソッド
私は試します:
私は得る:
C# 7.3 では、修飾子 'abstract' はこの項目に対して有効ではありません。言語バージョン「プレビュー」以上を使用してください。
ただし、 https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8で、この機能についての言及を見つけることができません
そのためのドキュメントはどこにありますか? またはここでメッセージが間違っていますか?
c# - デフォルトの実装を持つインターフェイスで抽象クラスを使用するのはいつですか?
C# 8 では、インターフェイスでの既定のメソッド実装のオプションが追加されています。つまり、インターフェイスでメソッドを定義できます。
デフォルトのコンストラクターも派生クラスの継承フィールドも必要としない状況では、デフォルトで何を使用する必要がありますか: デフォルトの実装を持つインターフェイス、または抽象クラスの昔ながらの方法?
この場合のスタイリングの規則はありますか?