問題タブ [explicit-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.
c# - ここで明示的なインターフェイス宣言が必要なのはなぜですか? (C#)
私は非常に単純なインターフェイスを実装し、それを使用して、次のようなインターフェイスを介してアクセスされるタイプのプロパティにアクセスしようとしています:
ただし、次のビルド エラーが発生します。
エラーの意味は理解できましたが、その理由がわかりません。「その他」は「IOther」を実装するので、なぜ問題が発生するのですか?
不完全な解決策は、インターフェイスを明示的に実装することです。
なぜこのボイラープレートが必要なのですか?
ありがとう。
編集:私がこの問題を抱えている実際の非例のコードで、これはオプションではないとして Test を宣言すると仮定します:
c# - .NET BCL クラス ClientBase が明示的に IDispose を実装する理由
ClientBase<T>
クラスがインターフェイスを明示的に実装していることは理解してIDisposable
いますが、なぜそれが明示的に行われたのかわかりません。
ClientBase は IDisposable メンバーを実装していません
MyClient
から派生した場合、この方法でオブジェクトをClientBase<T>
明示的に取得できません:Dispose
基になるインターフェイスにキャストするか、using
ステートメント デザイン パターンを使用してオブジェクトの有効期間を実装しない限り、次のようになります。
MicrosoftがこのクラスのDispose
メソッドを公開し、開発者が明示的に呼び出すことができる場合に、明示的なインターフェイスの実装を介してこのクラスのメソッドを非表示にする利点は何ですか?
クラスClientBase<T>
が競合するメソッド宣言を持つ 2 つの異なるインターフェイスを実装しているわけではないため、見逃しているものがない限り、この状況では明示的なインターフェイスの実装は不要であることがわかります.....
c# - C# の明示的な実装で「this」をインターフェイス型にキャストする必要があるのはなぜですか?
私はインターフェースを持っています:
実装するすべてのオブジェクトにProfile
はName
とがありますが、常に と同じになるようにAlias
制限するものもあります。この制限を適用するものは、次のように実装できます。Alias
Name
Alias
this
明示的なインターフェイス実装のコンテキスト内では、可能な型のみであり、それが実装されているクラスまたは他のインターフェイスではなく、インターフェイスProfile
を介してアクセスされたことがわかっているため、キャストが必要なのはなぜですか?Profile
getter 実装に使用return this.Name;
すると、次のエラーが発生します。
fortran - 構造型のサブルーチンへの Fortran プロシージャー・ポインター
Fortran では、いくつかのサブルーチンの 1 つを指すことができる派生型内にプロシージャ ポインターが必要です。この問題は SO ではよくあるようです:
構造型のプロパティとしての Fortran 保存プロシージャ
Fortran 2003 での型バインド プロシージャのオーバーロード
このタイプ バインドされたジェネリック サブルーチン呼び出しに一致する特定のサブルーチンがありません
プロシージャの引数を持つジェネリック型バインド プロシージャ
いくつか挙げると。関数に関するこの質問に対する答えは、最初の参考文献で非常にうまく提供されています。
ただし、型バインド プロシージャ ポインターがサブルーチンを指している場合に、このようなコードを適切に開発する方法については、まだ明確ではありません。問題は、返されるものに関連付けられた型がないように思われる (実際には何も返されないため)。
また、より最近の fortran の標準 (2003、2008) には単純な解決策が存在する可能性がありますが、この解決策はすべてのコンパイラで機能しない可能性があり、将来問題になる可能性があるというニュアンスを指摘したいと思います。そのため、コンパイラに適したソリューションに興味があります。
現在動作する小さなコード (以下を参照) がありますが、大きなコードでは、派生型でプロシージャ ポインターを使用するファイルで内部コンパイラ エラー (以下も参照) が発生します。私の質問は次のとおりです。以下のコードに何ができますか
1) 明示的なインターフェースを厳密に使用する
2) コンパイラに渡される情報を最大化する
3) コードができるだけ多くのコンパイラ間で移植可能であることを確認します (つまり、fortran 90 / 95 標準を使用します)。
上記をどの程度満たすことができますか(1が最も重要です)?上記の基準をすべて満たすことは可能ですか?「これらの基準をすべて満たす」というのは主観的なものであることは承知していますが、サブルーチンではなく関数に関する同じ質問に対する答えは「はい」であると主張します。
小さなコード:
大きなコードでのコンパイラ エラー:
アップデート
これは、コンパイラにより多くの情報を提供する小さな変更ですが、大きなコードではこれを試していません。ただし、恣意的なようで、役立つかどうかはわかりません。
解決策のコメント (@IanH によって提供された) 解決策についてコメントするだけです: もう 1 つのしわがありました。それは、Fortran 2003 の新機能によると、ステートメントを含める必要がある抽象インターフェイスにいくつかの派生型が入力されていたことですImport
。派生型の入力を抽象インターフェイスに認識させるため。これは、大きなコードに適用される小さな実用的な例であり、私が抱えていた内部コンパイラエラーを軽減します:)
どんな助けでも大歓迎です。
c# - プロパティ グリッドに明示的なインターフェイス メンバーを表示しますか?
次のコードがあるとします。
このフォームでは、propertygrid を設定します。
残念ながら、PropertyGridは明示的なインターフェイスの実装を示していません。私たちは何をすべきか?
c# - ジェネリックの明示的なインターフェイス呼び出しが常に基本実装を呼び出すのはなぜですか?
インターフェイス型制約を持つジェネリック メソッド内の明示的な C# インターフェイス呼び出しが常に基本実装を呼び出すのはなぜですか?
たとえば、次のコードを考えてみましょう。
このコードは次を出力します。
IDerived.Method
IBase.Method
予想されるものの代わりに:
IDerived.Method
IDerived.Method
実行時に決定された型の隠された、より派生した明示的なインターフェイス実装を呼び出す方法は (リフレクションを除いて) ないようです。
編集:明確にするために、上記の GenericMethod 呼び出しで check が true と評価される場合、次のようになります。
if (typeof(T) == typeof(IDerived))
したがって、答えは、「where T : class, IBase」というジェネリック型の制約により、T が常に IBase として扱われるということではありません。
c# - Ninjectを使用して明示的に実装されたメソッドに注入することは可能ですか?
これが私がやりたいことです:
しかし、何も注入されません。私が作業する唯一の方法は、属性と暗黙的な実装を使用することです:
それを行う方法はありますか?