問題タブ [explicit-implementation]

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

c# - インターフェイスの C# の「明示的な実装」は Java に存在しますか?

C# では、同じメソッド (F() など) を持つ 2 つの基本インターフェイスがある場合、明示的な実装を使用して異なる impl を実行できます。F() の場合。これにより、現在の視点に応じて、IMyInterface1 または IMyInterface2 としてオブジェクトを別の方法で処理できます。これはJavaで可能ですか?

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

c# - Reflection.emitを使用して明示的なインターフェース実装を発行する方法は?

次の簡単なソース コードを確認します。

以下は、Reflector を使用して A.dll アセンブリを逆コンパイルすることによって得られる同等の C# コードです。

型がインターフェイスを明示的にMyType実装したい場合はどうすればよいでしょうか? IMyInterfaceだから私はこれらの行を取ります:

コメントを切り替えて、次のコードを生成します。

しかし、現在、アプリケーションは動的タイプの作成に失敗しています。この行:

次の例外をスローします。

誰かが私のコードの何が問題なのかを教えてもらえますか?

ありがとう。

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

c# - C#言語設計:イベントの明示的なインターフェイスの実装

C#言語設計についての小さな質問:))

私がこのようなインターフェースを持っていた場合:

C#3.0の自動実装プロパティを使用して、このようなインターフェイスを明示的に実装することができます。

しかし、インターフェイスにイベントがあった場合:

そして、フィールドのようなイベントを使用して明示的に実装しようとしています。

次のコンパイラエラーが発生します。

error CS0071: An explicit interface implementation of an event must use event accessor syntax

フィールドのようなイベントは、自動実装されたプロパティのある種の二元論だと思います。

だから私の質問は:そのような制限が行われる設計上の理由は何ですか?

0 投票する
3 に答える
1252 参照

c# - 他のインターフェイスから継承するインターフェイスの明示的なC#インターフェイスの実装

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

ここで、IInterface1とIInterface2の両方を実装する次のクラスについて考えてみます。

SomeEventはIInterface1またはIInterface2の一部ではなく、IBaseInterfaceの一部であるため、これによりエラーが発生します。

クラスFooはIInterface1とIInterface2の両方をどのように実装できますか?

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

c# - リフレクションを使用して明示的に実装されたメソッドにアクセスするにはどうすればよいですか?

通常、私は次のようなリフレクションのメソッドにアクセスします。

ただし、Mが明示的な実装である場合、これは失敗します。

リフレクションを使用して明示的に実装されたメソッドにアクセスするにはどうすればよいですか?

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

c# - C#: インターフェイスを明示的に指定してプロパティをオーバーライドする

ICollection<T>.IsReadOnlyクラスからプロパティの明示的なインターフェイス実装をオーバーライドしようとしているときに、明示的なインターフェイス メンバーの実装は、またはCollection<T>などの修飾子を持つことができないため、オーバーライドできないと述べているドキュメントに出くわしました。MSDNでは、明示的なインターフェイス メンバーの実装によって呼び出される別の抽象メンバーまたは仮想メンバーを作成することによって、明示的なインターフェイス メンバーの実装を継承できるようにする方法を指定するところまで行っていますこれまでのところ問題はありません。virtualabstract

しかし、私は疑問に思います: C# では、インターフェイスを明示的に指定するだけで、明示的に実装されたインターフェイス メンバーをオーバーライドできるのはなぜですか?

たとえば、プロパティとメソッドを使用して、次のような単純なインターフェイスがあるとします。

また、Aインターフェイスを明示的に実装しTest()、独自のインターフェイス メンバー実装を呼び出すメソッドを持つクラス。

ご覧のとおり、4 つのメンバーはいずれも仮想または抽象ではないため、次のBようなクラスを定義すると、次のようになります。

B次に、キャスト toのインスタンスが のAように動作することを期待しますA。そしてそれは:

今、キャッチが来ます。クラス宣言の 1 つの点を除いてC、完全なコピーであるクラスを作成します。B

のインスタンスがCにキャストされると、 のAように動作するのではなく、 のように動作するようになりAましたC

メソッドでさえ、Test()オーバーライドされたメソッドをC!で呼び出すようになりました。どうしてこれなの?

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

c# - アクセスIEnumerableIEnumerable からの .GetEnumerator().GetEnumerator()

getenuemrator() メソッドがクラスで定義されていないというエラーがあるコードを見つけてください

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

c# - .NET C# 親インターフェイスでの祖父母のインターフェイス メソッドの明示的な実装

そのタイトルは一口ですよね...

これが私がやろうとしていることです:

これに関する私の問題は... Bar() を呼び出すのが不便だということです:

IFoo.Bar(){...}だから...基本的に2つのインターフェースを1つにマージする以外に、私のクラスで宣言する方法はありますか?

そうでない場合、なぜですか?

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

c# - インターフェイスを実装するか、明示的にインターフェイスを実装するかをどのように選択しますか?

インターフェイスを実装するには、次の2つの方法があります。

違いは、インターフェイスが明示的に実装されている場合、誰かがFooメソッドを呼び出すことを許可される前に、実際に指定されたインターフェイスとしてキャストする必要があることです。

どちらを使用するかをどのように決定しますか?

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

c# - 基本クラスで明示的に実装されたinterface-methodを呼び出す方法

2つのクラス(一方が他方から派生)の両方が同じインターフェイスを明示的に実装する状況があります。

の派生クラスの実装からI.M()、基本クラスの実装を呼び出したいのですが、その方法がわかりません。私がこれまでに試したことはこれです(クラスBで):

別の(インターフェイスに明示されていない)ヘルパーメソッドを実装せずに、これを行う方法はありますか?


更新

派生クラスから呼び出すことができる「ヘルパー」メソッドで可能であることを私は知っています。例:

また、インターフェイスを非明示的に実装するように変更することもできます。しかし、これらの回避策がなくても可能かどうか疑問に思っていました。