問題タブ [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.
c# - インターフェイスの C# の「明示的な実装」は Java に存在しますか?
C# では、同じメソッド (F() など) を持つ 2 つの基本インターフェイスがある場合、明示的な実装を使用して異なる impl を実行できます。F() の場合。これにより、現在の視点に応じて、IMyInterface1 または IMyInterface2 としてオブジェクトを別の方法で処理できます。これはJavaで可能ですか?
c# - Reflection.emitを使用して明示的なインターフェース実装を発行する方法は?
次の簡単なソース コードを確認します。
以下は、Reflector を使用して A.dll アセンブリを逆コンパイルすることによって得られる同等の C# コードです。
型がインターフェイスを明示的にMyType
実装したい場合はどうすればよいでしょうか? IMyInterface
だから私はこれらの行を取ります:
コメントを切り替えて、次のコードを生成します。
しかし、現在、アプリケーションは動的タイプの作成に失敗しています。この行:
次の例外をスローします。
誰かが私のコードの何が問題なのかを教えてもらえますか?
ありがとう。
c# - C#言語設計:イベントの明示的なインターフェイスの実装
C#言語設計についての小さな質問:))
私がこのようなインターフェースを持っていた場合:
C#3.0の自動実装プロパティを使用して、このようなインターフェイスを明示的に実装することができます。
しかし、インターフェイスにイベントがあった場合:
そして、フィールドのようなイベントを使用して明示的に実装しようとしています。
次のコンパイラエラーが発生します。
error CS0071: An explicit interface implementation of an event must use event accessor syntax
フィールドのようなイベントは、自動実装されたプロパティのある種の二元論だと思います。
だから私の質問は:そのような制限が行われる設計上の理由は何ですか?
c# - 他のインターフェイスから継承するインターフェイスの明示的なC#インターフェイスの実装
次の3つのインターフェイスについて考えてみます。
ここで、IInterface1とIInterface2の両方を実装する次のクラスについて考えてみます。
SomeEventはIInterface1またはIInterface2の一部ではなく、IBaseInterfaceの一部であるため、これによりエラーが発生します。
クラスFooはIInterface1とIInterface2の両方をどのように実装できますか?
c# - リフレクションを使用して明示的に実装されたメソッドにアクセスするにはどうすればよいですか?
通常、私は次のようなリフレクションのメソッドにアクセスします。
ただし、Mが明示的な実装である場合、これは失敗します。
リフレクションを使用して明示的に実装されたメソッドにアクセスするにはどうすればよいですか?
c# - C#: インターフェイスを明示的に指定してプロパティをオーバーライドする
ICollection<T>.IsReadOnly
クラスからプロパティの明示的なインターフェイス実装をオーバーライドしようとしているときに、明示的なインターフェイス メンバーの実装は、またはCollection<T>
などの修飾子を持つことができないため、オーバーライドできないと述べているドキュメントに出くわしました。MSDNでは、明示的なインターフェイス メンバーの実装によって呼び出される別の抽象メンバーまたは仮想メンバーを作成することによって、明示的なインターフェイス メンバーの実装を継承できるようにする方法を指定するところまで行っています。これまでのところ問題はありません。virtual
abstract
しかし、私は疑問に思います: C# では、インターフェイスを明示的に指定するだけで、明示的に実装されたインターフェイス メンバーをオーバーライドできるのはなぜですか?
たとえば、プロパティとメソッドを使用して、次のような単純なインターフェイスがあるとします。
また、A
インターフェイスを明示的に実装しTest()
、独自のインターフェイス メンバー実装を呼び出すメソッドを持つクラス。
ご覧のとおり、4 つのメンバーはいずれも仮想または抽象ではないため、次のB
ようなクラスを定義すると、次のようになります。
B
次に、キャスト toのインスタンスが のA
ように動作することを期待しますA
。そしてそれは:
今、キャッチが来ます。クラス宣言の 1 つの点を除いてC
、完全なコピーであるクラスを作成します。B
のインスタンスがC
にキャストされると、 のA
ように動作するのではなく、 のように動作するようになりA
ましたC
。
メソッドでさえ、Test()
オーバーライドされたメソッドをC
!で呼び出すようになりました。どうしてこれなの?
c# - アクセスIEnumerableIEnumerable からの .GetEnumerator().GetEnumerator()
getenuemrator() メソッドがクラスで定義されていないというエラーがあるコードを見つけてください
c# - .NET C# 親インターフェイスでの祖父母のインターフェイス メソッドの明示的な実装
そのタイトルは一口ですよね...
これが私がやろうとしていることです:
これに関する私の問題は... Bar() を呼び出すのが不便だということです:
IFoo.Bar(){...}
だから...基本的に2つのインターフェースを1つにマージする以外に、私のクラスで宣言する方法はありますか?
そうでない場合、なぜですか?
c# - インターフェイスを実装するか、明示的にインターフェイスを実装するかをどのように選択しますか?
インターフェイスを実装するには、次の2つの方法があります。
違いは、インターフェイスが明示的に実装されている場合、誰かがFoo
メソッドを呼び出すことを許可される前に、実際に指定されたインターフェイスとしてキャストする必要があることです。
どちらを使用するかをどのように決定しますか?
c# - 基本クラスで明示的に実装されたinterface-methodを呼び出す方法
2つのクラス(一方が他方から派生)の両方が同じインターフェイスを明示的に実装する状況があります。
の派生クラスの実装からI.M()
、基本クラスの実装を呼び出したいのですが、その方法がわかりません。私がこれまでに試したことはこれです(クラスBで):
別の(インターフェイスに明示されていない)ヘルパーメソッドを実装せずに、これを行う方法はありますか?
更新:
派生クラスから呼び出すことができる「ヘルパー」メソッドで可能であることを私は知っています。例:
また、インターフェイスを非明示的に実装するように変更することもできます。しかし、これらの回避策がなくても可能かどうか疑問に思っていました。