問題タブ [multiple-inheritance]
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# - 多重継承をエミュレートし、リフレクションを使用してこのコードを最適化するにはどうすればよいですか?
PageItemsがモデル オブジェクトである WPF アプリケーションがあります。
私のメイン ViewModel にはPageItemViewModelsの ObservableCollection があり、それぞれが一致する PageItem モデル オブジェクトから構築されます。
各PageItemViewModelは、抽象クラスBaseViewModelから継承して、INotifyPropertyChanged 機能を取得します。
各PageItemViewModelは、必要なプロパティがあることを確認するためにIPageItemViewModelも実装します。
最終的には約 50 ページになるので、不要なコードを削除したいと思います。
- 解決済み(以下を参照) : PageItemViewModel クラスにIdCode と Title を継承させて、各クラスに実装する必要がないようにする方法はありますか? これらのプロパティを必要としない他のViewModelがそれを継承するため、BaseViewModelに配置することはできません。また、IPageItemViewModelに配置することはできません。これは単なるインターフェイスであるためです。これには C# がサポートしていない複数の継承が必要であることを理解しています
- 解決済み (以下を参照) : switchステートメントを取り除く方法はありますか。たとえば、代わりにリフレクションを使用するなどです。
以下は、 WPFアプリケーションにあるコードを示すスタンドアロンのコンソール アプリケーションです。
リファクタリング: インターフェイスを抽象クラスに変更
Switch ステートメントを削除するための回答:
ありがとうジャブ:
java - Javaでの多重継承の代替
私は2つの豆を作成しました
これで、クラスがバックページを認識している場合はbackPageBeanを拡張し、ある種のメッセージを表示する必要がある場合はInformationMessageBeanを拡張します。
問題は、BackPageAwareとInformationAwareの両方であるBeanが必要な場合、多重継承がないため、どのようなアプローチをとるべきかということです。
c++ - 多重継承が唯一の合理的な解決策になるのはいつですか?
明確にするために、私は多重継承が良いか悪いかを尋ねていません。私はその議論の両側から多くの議論を聞いた。
C ++には、多重継承が何かを達成する唯一の方法であるか、少なくとも他のすべての選択肢よりも最適な方法であり、それが実現しないような設計上の問題やシナリオがあるのではないかと思います。他のことを考える感覚。
明らかに、この質問は多重継承をサポートしない言語には当てはまりません。
c# - C#のインターフェイスで継承されたメソッドの「名前を変更」
Repository Pattern
ASP.NET MVC アプリケーション (.NET 3.5、ASP.NET MVC 1.0、および Entity Framework を使用) を開発しているときに、を理解しようとしています。依存性注入を取得し、すべてが 1 つのコントローラーと 1 つのエンティティー型で機能するのに十分な距離まで到達しましたが、今では、異なる型間の関係のサポートを実装するところまで到達しており、行き詰まっています。
私が見たすべての例では、リポジトリ インターフェイスは のような名前で、アイテムのみIContactsRepository
に関係する (CRUD) メソッドが含まれています。Contact
のグループ化を実装したいContacts
ので、 というエンティティ タイプとGroup
、IGroupRepository
グループに対する操作 (CRUD) を処理するためのインターフェイスがあります。
- 複数のエンティティ タイプに関係するメソッドはどこに属しますか (この場合、たとえば、 aに a
AddToGroup
を追加するメソッド)。Contact
Group
リポジトリのより大きな継承構造を試み、次のインターフェイスを作成しました。
IRepository
次に、次のように、を継承するマスター リポジトリを作成しようとしました。
このコードを使用して、コントローラからリポジトリ内のメソッドの 1 つを呼び出そうとするとすぐに
経由でGet<Contact>()
継承されたものと経由で取得されたもののあいまいさに関するビルド エラー メッセージが表示されます。は異なるタイプの同じジェネリック インターフェイスを継承するため、これは許可されないことを理解しました (リンクされた記事の例 5 を参照)。IContactsRepository
Get<Group>()
IGroupsRepository
IRepository
今、私は他のインターフェースを介して継承しているので、たとえば以下のように、これらのメソッドの「名前をオーバーライド」できる可能性はありますか?
/li>
そうすれIRepository.Getcontacts
ば、あいまいさなくアクセスできます。それは可能ですか、またはこの問題の回避策はありますか?
明確にするために、新しい質問:
コントローラーからの呼び出しで、どの
Get()
メソッドが必要かを指定する方法はありますか?1 つのエンティティ タイプだけでなく、多くのことを処理するリポジトリが必要であるという、最初の問題に取り組む最善の方法は何ですか?
編集:Repository
からのクラスと呼び出しのコード例を追加しましたController
。
python - 多重継承の排除
次の問題があり、多重継承を使用せずにこれらのオブジェクトをモデル化する良い方法があるかどうか疑問に思っています。違いがあれば、私は Python を使用しています。
学生は、連絡先情報と学生情報が必要です。大人は、連絡先情報と請求情報が必要です。生徒は成人の生徒である可能性があり、連絡先/生徒/請求情報が必要な場合と、子供である可能性がある場合は、連絡先/生徒/保護者の情報が必要な場合があります。
システムがどのように使用されるかを明確にするために、すべての大人のリスト (大人の生徒と保護者を取得します)、またはすべての生徒のリスト (子供の生徒と保護者を取得します) を要求できるようにする必要があります。成人学生)。
また、これらのオブジェクトはすべて、共通の基本クラスを持つ必要があります。
c++ - C++、異なるアドレスを持つ基本クラスを静的に検出しますか?
複数のベースを持つ派生クラスがある場合、各ベースの各 this ポインターは、1 つを除いて、派生オブジェクトの this ポインターとは異なります。継承階層に 2 つの型がある場合、それらが同じ this ポインターを共有しているかどうかをコンパイル時に検出したいと考えています。このようなものは機能するはずですが、機能しません:
それは「整数定数式」である必要があり、標準に従って整数キャストのみが許可されているためです(仮想継承が使用されていない場合、コンパイル時の情報のみが必要なため、これはばかげています)。結果を整数のテンプレート パラメータとして渡そうとすると、同じ問題が発生します。
私ができる最善のことは、起動時にチェックすることですが、コンパイル中に情報が必要です (いくつかの深いテンプレートハッカーを機能させるため)。
c++ - 多重継承が必要になるシナリオはありますか?
多重継承が必要になるシナリオはありますか? 例を挙げてください。
python - 基本テストクラスで定義されたクラス属性を見つけるにはどうすればよいですか?
データベースに対していくつかの統合テストを実行していますが、次のような構造にしたいと考えています。
このようにして、次のように SQL Server テストと Oracle テストを別々に実行できます。
または、次のようなすべての統合テスト:
ただし、鼻は基本クラスではなく、サブクラスの属性のみを検索するようです。したがって、次のようにテスト クラスを定義する必要があります。そうしないと、テストが実行されません。
これを維持するのは少し面倒です。これを回避する方法はありますか?1 つの基本クラスだけを扱う場合は、メタクラスを使用して、各クラスの属性を定義します。しかし、テスト クラス用のメタクラス、Oracle 用のメタクラス、SQL Server 用のメタクラスがあることに不安を覚えます。
c# - 多重継承がオプションでない場合にコードを再利用する方法は?
テスト済みの古いクラスのいくつかから、構築中の新しいクラスにいくつかのメソッドを利用したいと思います。残念ながら、C# は多重継承をサポートしていません。これらの古いクラスのコードを再利用するにはどうすればよいですか? メンバーオブジェクトとして作成するだけですか? または他に選択肢はありますか?
c++ - C++ での非対称仮想継承ダイヤモンド
だから私はこの考えを持っています.C ++で実装することは基本的に不可能だと思います...しかし、私は尋ねたい. Stroustrup の第 15 章を読みましたが、答えが得られませんでした。継承ダイヤモンドに関する他の 10 億の質問がこの質問に答えているとは思わないので、ここで質問します。
問題は、共通の基本クラス自体を共有する 2 つの基本クラスから継承するとどうなるかということですが、実質的には 2 つのうちの 1 つだけが継承されます。例えば:
私がこれをやりたいと思う理由は、ライブラリ全体を再コンパイルせずに既存のライブラリを拡張しようとしているからです (ワームの缶を開きたくない)。変更したい継承のチェーンが既に存在します。基本的にはこのようなものです(アスキーアートを許してください)
写真をゲット?各My
クラスのオブジェクトを、それらが本質的に置き換えるクラスのオブジェクトにしたいのですが、継承図の次のクラスでは、My
基本クラスからオーバーライドされたメソッド実装を使用する必要がありますが、他のすべてのメソッドはライブラリのクラス。ライブラリのクラスは事実上継承しないのでこんな感じ
しかし、クラスを事実上継承させると
MyDerived
vtableがあり、vtableがあるため、オブジェクトMyBase
は1つだけですか?LibBase
この質問が十分に明確であることを願っています。