問題タブ [multiple-interface-implem]
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.
php - 2 つの異なるルートを介してインターフェイスを実装する PHP の結果は?
PHPで2つの異なるルートを介して同じインターフェースを実装すると、どのような結果になりますか?
つまり、次のようなものです。
この場合、2 つの異なる親 -とからmyClass
実装されます。これには何か影響がありますか?私の直感では、PHP はこれを問題なく処理する必要がありますが、確認したいだけです。この場合、PHPは正確に何をしますか? 必要な機能がインターフェイスに実装されていることを確認するたびに、インターフェイスを検出して終了するか、それともそれ以上のことを行うかを確認するだけですか?baseInterface
myInterface
baseClass
c++ - 複数のCOMインターフェイスの実装はC++でどのように機能しますか?
ブラウザヘルパーオブジェクトに関するこのサンプルコードを理解しようとしています。
内部では、作成者は複数のインターフェイス(IObjectWithSite、IDispatch)を公開する単一のクラスを実装します。
彼のQueryInterface関数は次のことを実行します。
Cの観点からは、インターフェイスポインターはVTableへの単なるポインターであることを学びました。つまり、C++はstatic_castを使用して実装されたインターフェイスのVTableを返すことができるということです。
これは、この方法で構築されたクラスがメモリ内に多数のVTable(IObjectWithSite、IDispatchなど)を持っていることを意味しますか?C ++は、さまざまなインターフェイス(それぞれにQueryInterface、AddRef、およびRelease関数があります)での名前の衝突をどのように処理しますか?これらのそれぞれに異なるメソッドを実装できますか?
.net - 辞書のシリアライズDataContractJsonSerializer を使用して JSON に変換
を使用して JSON にシリアル化するオブジェクト ツリーがありますDataContractJsonSerializer
。Dictionary<TKey, TValue>
シリアル化されますが、マークアップが好きではありません-アイテムは次のようにレンダリングされません:
KeyValuePair<TKey, TValue>
シリアル化されたオブジェクトの配列のようなものです。
醜いですね。
そのため、汎用 Dictionary を を実装するカスタム オブジェクトにラップすることでこれを回避しISerializable
、カスタム シリアル化をGetObjectData
メソッドに実装します (わずか 3 行で済みます)。
ここでの問題 - クラスを から派生させることができないため、Dictionary<TKey, TValue>
すべてのロジック ( 、 など) をカスタム クラスに実装Add
しClear
、プライベートDictionary<TKey, TValue>
フィールドに適用します。カスタム オブジェクトを使用するときに、すべての一般的な Dictionary 機能を自由に使用できるため、継承が望ましいでしょう。
継承の問題は、独自にDictionary<TKey, TValue>
実装することであり、次のようにカスタム クラスから明示的に実装したとしても、この実装を好むようです。ISerializable
DataContractJsonSerializer
ISerializable
明らかに明示的なインターフェイス実装を使用できなくても、同じインターフェイスを 2 回実装できるため、これが可能であることに実際に驚きました。そのため、複数のインターフェイスの実装に関するブログ投稿で状況をより詳細に分析しました。
したがって、そこで行った実験によると、内部で使用されているキャストのタイプに関係なく、シリアライザーは ISerializable の実装を呼び出す必要があります-
また:
KeyValuePair<TKey, TValue>
しかし、シリアライザーがまだ呼び出されている結果のJSONでわかるように、それは明らかに起こっていません。私が行方不明になっていると何が起こっているのでしょうか?
更新: これまでに得た回答とコメントは、回避策を示唆しているだけです。ただし、非常にうまく機能する回避策があることに注意してください。この質問をすることで、2つの目的があります。
最終的には元の設計で動作するようにします。そのためだけにシリアライゼーション ロジックを変更するつもりはありません。多くのコードとロジックが依存しています。
なぜシリアライゼーション コードを使用しないのかという謎を解明するために、
DataContractJsonSerializer
参照したブログ投稿に見られるように、インターフェイスの実装と継承についてあらゆる種類の実験を行い、すべての実装を把握していると確信していました。プロセスから外れたので、この場合何が起こっているのか理解できずに困っています
c++ - Qt DBus: 複数のインターフェイスを実装するオブジェクトを登録する
Qt DBus ライブラリを使用して、複数のインターフェイスを実装するオブジェクトを登録するのに苦労しています。
C++ 多重継承を使用して両方のインターフェイスを実装しています。
このqdbusxml2cpp
ツールDBusAdaptor
は各インターフェイスに対して を生成しますがQDBusConnection
、インターフェイスの実装者をそのオブジェクトに追加するメソッドがありません。
そして、このオブジェクトを DBus サービスに公開したいと考えています。
これを実現するには、独自のアダプターを実装する必要がありますか?
c++ - 2 つのインターフェイス、複数の継承が 1 つのコンテナーに結合されますか?
次の問題に出くわしました: A と B の 2 つのパッケージがそれぞれのパッケージで正常に動作しています。それぞれに独自のインターフェースと独自の実装があります。ここで、A のアダプターと B の具体的な実装を組み合わせたパッケージ C を作成しました。C は実際には A のインターフェイスのみを実装し、B のインターフェイスを内部的に継承して使用するだけです。ほとんどの場合、コンテナからインターフェイス A にアクセスするだけで十分でしたが、今では B からのメソッドにもアクセスできる必要があります。簡単な例を次に示します。
問題は、パッケージ A と B の両方の組み合わせを実現して、1 つのコンテナから両方のインターフェイスにアクセスできるようにする一方で、A と B のすべての実装の詳細を継承するにはどうすればよいかということです。
java - Java多重継承
Java の多重継承の問題を解決する方法を完全に理解するために、明確にする必要がある古典的な質問があります。
私がクラスを持っているとしましょう。Animal
これにはサブクラスがあり、鳥と馬の両方から拡張されたクラスBird
をHorse
作成する必要があります。Pegasus
Bird
Horse
Pegasus
これは古典的なダイヤモンドの問題だと思います。私が理解できることから、これを解決するための古典的な方法は、、Animal
およびBird
クラスHorse
のインターフェースを作成し、Pegasus
それらから実装することです。
鳥や馬のオブジェクトをまだ作成できるという問題を解決する別の方法があるかどうか疑問に思っていました。動物を作成できる方法があれば、それは素晴らしいことですが、必須ではありません。
c# - 使用するインターフェイスの実装をグローバルに設定できますか?
私はインターフェースを持っています:
...複数の実装者がいます:
次のように、グローバルにアクセス可能な場所から使用する実装者を指定できるようにしたいと考えています。
...そして、アプリのどこからでも次のように呼び出します。
これは可能ですか?「「SQLiteHHSDBUtils」は「タイプ」ですが、上記の hhsdbutil への割り当てにより「変数」のように使用されます。
c# - プロセス タスク マネージャーからインターフェイスを非表示にする
複数のインターフェイスを持つ WPF/C# プログラムを書いています。あるインターフェースをバックグラウンドで開いたままにし、別のインターフェースをフォアグラウンドで開いておきたい場合があります。これを行うために、interface2.Show() メソッドを使用しましたが、もう一方の interface1.Close () メソッドは呼び出されませんでした。問題は、タスク マネージャーで 2 つのプログラムが言及されていることですが、明らかに 1 つしかありません。タスク マネージャーにエントリを 1 つだけ表示する方法はありますか?
私のプログラムは、すべてのインターフェイスを別のプログラムとして認識しているようです。それを修正する方法はありますか?どこが間違っていますか?
皆さん、ありがとうございました!!!
アップデート:
スケジューラー.cs:
スケジューラー.xaml:
New_task_1.cs:
New_task_1.xaml:
2つのウィンドウに関係するコードのみを投稿しました...
ユーザーが Button Add タスクをクリックすると、ウィンドウ New Task が開きます。
私が探しているのは、タスクマネージャーで「新しいタスク」の音声を非表示にし、「スケジューラー」のみを維持しながら、両方のウィンドウが開いている方法です。