問題タブ [interface]

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 投票する
14 に答える
439142 参照

c# - C# での多重継承

多重継承は良くない (ソースが複雑になる) ため、C# はそのようなパターンを直接提供しません。しかし、この能力があると便利な場合もあります。

たとえば、インターフェイスとそのような 3 つのクラスを使用して、欠落している多重継承パターンを実装できます。

インターフェイスの 1 つにメソッドを追加するたびに、クラスFirstAndSecondも変更する必要があります。

C++ で可能なように、複数の既存のクラスを 1 つの新しいクラスに挿入する方法はありますか?

ある種のコード生成を使用した解決策があるのではないでしょうか?

または、次のようになります (架空の C# 構文)。

インターフェイスの 1 つを変更するときにクラス FirstAndSecond を更新する必要がないようにします。


編集

たぶん、実際の例を検討する方が良いでしょう:

プロジェクト内の別の場所で既に使用している既存のクラス (ITextTcpClient に基づくテキスト ベースの TCP クライアントなど) があります。Windows フォーム開発者が簡単にアクセスできるように、クラスのコンポーネントを作成する必要性を感じています。

私の知る限り、現在これを行うには2つの方法があります。

  1. FirstAndSecond で示されているように、コンポーネントから継承され、クラス自体のインスタンスを使用して TextTcpClient クラスのインターフェイスを実装する新しいクラスを作成します。

  2. TextTcpClient から継承し、何らかの形で IComponent を実装する新しいクラスを作成します (実際にはまだ試していません)。

どちらの場合も、クラスごとではなく、メソッドごとに作業を行う必要があります。TextTcpClient と Component のすべてのメソッドが必要になることがわかっているので、これら 2 つを 1 つのクラスに結合するのが最も簡単な解決策です。

競合を避けるために、これはコード生成によって行われ、結果は後で変更される可能性がありますが、これを手で入力するのは本当に面倒です。

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

c# - 列挙型の VB.net インターフェイスを C# に変換する方法

C# に移植する必要がある次の VB.net インターフェイスがあります。C# では、インターフェイスでの列挙は許可されていません。このインターフェイスを使用するコードを変更せずにこれを移植するにはどうすればよいですか?

0 投票する
11 に答える
1572 参照

c# - インターフェイスに対するプログラミングを保証するための明示的なインターフェイスの使用

クラスの使用をそのインターフェースにロックする方法として、明示的なインターフェースを使用するための議論を見てきました。議論は、他の人にインターフェイスへのプログラミングを強制することで、クラスの分離を確実にし、テストを容易にすることができるというものです。

例:

そして、Knife オブジェクトを使用するには:

このインターフェイス実装方法をお勧めしますか? なぜですか、そうでないのですか?

編集:また、私が明示的なインターフェースを使用していることを考えると、以下は機能しません。

0 投票する
4 に答える
4121 参照

java - Validate インターフェイスの継承の設計

非常に多くの異なる可能性があり、それらにはすべて長所と短所があり、どれを使用すればよいかわからないため、私はデザインが得意ではありません。とにかく、ここに私の問題があります。さまざまなゆるやかに関連するクラスを検証する必要があります。ただし、これらのクラスの中には、検証を行うために追加情報が必要なものもあります。オブジェクトを検証するために使用できるメソッドvalidateが必要であり、オブジェクトがインターフェイスで検証可能かどうかを判断したいと考えていますValidatable。以下は、私が持つことができる2つの基本的な解決策です。

これは、検証可能な何かが実装され、検証に使用できる一般的なグローバルインターフェイスを持つ最初のソリューションですが、Object1validate()はこれをサポートしていないため、一種の機能不全ですが、Object2 はそれをサポートしており、他の多くのクラスも同様です。

別の方法として、次のようにすると、トップレベルのインターフェイスがなくなります。

私が抱えている主な問題は、少なくともXまたはYオブジェクトが検証可能であると言えるように、トップレベルのインターフェースを持つという考えに固執していることだと思います。

0 投票する
6 に答える
452 参照

interface - インターフェイス設計に関する質問

しばらく前にこの質問をしましたが、基本的にプロジェクトはブラウザでExcelを再現することでほとんど構成されています。Excel のような方法でデータを入力してもらいたい。私が持っている質問は、使用するのに最適なコントロールは何ですか? 通常のテーブルを使用して列を追加する必要がありますか、それともデータグリッドを使用して XtoY で反転する必要がありますか? どのようなアプローチをとりますか?

助けてくれてありがとう。

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

c# - .NET での COM インターフェイスの派生

私の制御不能な会社の制約により、次のシナリオがあります。

次のインターフェイスを定義する COM ライブラリ (CoClass なし、インターフェイスのみ):

両方のインターフェイスを実装し、アプリケーションに上記のサービスを提供する COM (C++ で記述) があります。すべてうまくいっていると思います。

私は.NET(C#)で 新しいものを構築しようIProviderとしています。IService

COM ライブラリのプライマリ相互運用機能アセンブリを構築し、次の C# を実装しました。

これを既存のランタイムに組み込んでみると、NewProviderCOM (C++) からQueryInterfaceIServiceProvider 用のオブジェクトを作成できます。IServiceProvider でメソッドを呼び出そうとすると、aSystem.ExecutionEngineExceptionがスローされます。

私が見つけることができる唯一の他のことは、#import によって作成された .tlh ファイルを見ることです。レガシー COM IExistingProvider クラスが、それが IServiceProvider から派生したことを正しく示していることを示しています。ただし、.NET クラスは IDispatch のベースを示しています。これが兆候なのか、兆候なのか、役に立つのか、それとも何か他のものなのか、私にはわかりません。

0 投票する
7 に答える
138997 参照

java - インターフェイスを実装する抽象クラスが、インターフェイスのメソッドの 1 つの宣言/実装を見逃す可能性があるのはなぜですか?

抽象クラスを使用してインターフェースを実装すると、Java で奇妙なことが起こります。インターフェースのメソッドの一部が完全に欠落している可能性があります (つまり、抽象宣言も実際の実装も存在しない) が、コンパイラは文句を言いません。

たとえば、次のインターフェイスがあるとします。

次の抽象クラスは、警告やエラーなしで楽しくコンパイルされます。

理由を説明できますか?

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

.net - ジェネリック インターフェイスを使用した .NET 継承

こんにちは、私は現在、キャッスル プロジェクトの ActiveRecord とリモーティング機能をいじっています。

私の現在の問題は、アドレス クラスで IBaseRepository から保存サブを実装する方法を見つける必要があることです。その方法がわかりません。

これが私の現在のコードです。VSは「IAddressを実装する」という行で、[Shared].IBaseRepository(Of [Shared].IAddress)にSub Save(obj As IAddress)を実装する必要があることを教えてくれます。

およびオンライン上 Public Overrides Sub Save(ByVal obj As Address) IBaseRepository(Of IAddress).Save を実装

[Shared].IBaseRepository(Of [Shared].IAddress) に Sub Save がないため、Save を実装できません。

私はそれを理解していません:(私を啓発してください。

ティア

0 投票する
6 に答える
22167 参照

java - Javaの最終定数をオーバーライドできるのはなぜですか?

Javaの次のインターフェースについて考えてみます。

そして次のクラス:

クラスAがやって来て、インターフェイスIの最終定数をオーバーライドできるのはなぜですか?

自分で試してみてください:

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

java - インターフェースが一般的すぎる

私が扱っている Java コードには、データ アクセス オブジェクト (DAO) を定義するためのインターフェイスがあります。ほとんどのメソッドは、データ転送オブジェクト (DTO) のパラメーターを取ります。この問題は、DAO の実装で特定の種類の DTO を参照する必要がある場合に発生します。メソッドは次に、DTO から SpecificDTO への完全に不必要なキャストを実行する必要があります。それだけでなく、コンパイラは、DAO の特定の実装に対して、特定の型のパラメーターとしてのみ取る必要がある型チェックを強制することはできません。 DTO: 私の質問は、これを可能な限り最小の方法で修正するにはどうすればよいかということです。