問題タブ [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 投票する
2 に答える
932 参照

c# - XML コメント -- 明示的に実装されたインターフェイスに適切にコメントするにはどうすればよいですか?

コード:

私の推測は次のとおりです。

確信はないけど。ECMA ガイドは区別に役立たなかったので、私の推測が正しいという保証を探しているのだと思います。

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

c# - IDisposableへの明示的な変換

いくつかのブロック内の文字列に対して必要な作業を行うために、いくつかXmlReaderXmlWriterオブジェクトを使用しています。try...catch

表記法を使用することが好ましい構文であることは知っていusing (XmlReader NewReader = XmlReader.Create(...))ますが、私はそれがあまり好きではないので、finallyブロックを追加して実行NewReader.Close();してNewWriter.Close();います。

ただし、コード分析では、これらのオブジェクトが破棄されていないという不満があり、メソッドを呼び出す必要がありますDispose()

問題は、これらのクラスではDispose()メソッドが明示的に実装されているため、とを使用する必要があること((IDisposable)(NewReader)).Dispose();です((IDisposable)(NewWriter)).Dispose();

このテクニックに欠点はありますか?

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

c# - C#が明示的に実装された仮想メソッドをサポートしないのはなぜですか?

C#のインターフェイスメソッドは明示的に実装できるため、インスタンスがインターフェイスタイプに明示的にキャストされると、その実装が呼び出されます。これがクラスの仮想メソッドでもサポートされていないのはなぜですか?

「多重継承」の問題の回避はインターフェースに固有ですが、明示的に実装されたメンバーがインターフェースに役立つ他のすべての理由から、仮想メソッドにも役立つようです。よりクリーンなリターンタイプの共分散モデルが思い浮かびます。

編集:リクエストにより、例:

私はこれをシミュレートするためにヘルパーメソッドを使用することを知っていますが、正味の効果には、明示的な実装が持つであろう悪い特性のいずれかがあるようですが、より汚いAPIを使用します。私の質問の核心は、戻り型の共分散を行う方法ではなく、インターフェイスの同様のメカニズムが仮想メソッドでサポートされていない理由です。

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

.net - ArrayクラスがIlistインターフェイスを暗黙的にではなく明示的に実装するのはなぜですか?

私のターゲット言語は.netフレームワークを使用したC#です。このトピックの背後にあるポイントまたは理由を知りたいですか?

どんなアドバイスや提案も高く評価されます。

編集

なぜ私はこの質問をしたのですか?なぜなら今のところ、indexofのようなArrayクラスのいくつかの有用なメンバーがキャストの背後に燃えているからです!!! マイクロソフトがilistインターフェースを分割したほうがいいのではないかと思います。

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

.net - F# でインターフェイスを明示的に実装する

わかりました、C# には明示的なインターフェイスの実装が あります。F# で同様のことをしたいと思います。

私はいくつかのインターフェース(およびクラス)を持っています

したがって、私が抱えている問題は、 Update が3回異なる方法で定義されていることです。したがって、C# のExplitit Interface Implementationに相当するものが必要です。インターフェイスに実装することを考えています (F# では合法であるため) - いくつかの型キャストで構成されるだけです。

私の理解では、F# でのすべてのインターフェイスの実装はクラスで明示的ですが、インターフェイスが別のインターフェイスから継承されると、そのインターフェイスのみを (明示的に) 実装します。(したがって、私の Board クラスは I Board のみを実装します)

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

c# - 動的オブジェクトで明示的なインターフェイス実装を使用する

インターフェイスの明示的な実装を試しています。これは、現在のコンテキストでは無効なメソッドでインテリセンスを削除することです。/practical-applications-of-the-adaptive-interface-pattern-the-fluent-builder-context/を参考にしてください。それらが呼び出し可能でないことを証明するために、dynamic キーワードを使用できると考えました。そうすれば、少なくとも私のコードはコンパイルされるからです。コンパイルはできますが、期待どおりに動作しません。動的変数はクラス メソッドにアクセスできますが、明示的に実装されたインターフェイス メソッドにはアクセスできません。

そして、ここに私の主張を証明するための3つのテストがあります

誰かがこの理由を説明するのに十分親切でしょうか? この機能が必要だった 1 つの例は、TennisGame に 3 人以上のプレーヤーを追加できないことを証明することでした。

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

silverlight - Silverlight で明示的に実装されたジェネリック インターフェイスへのバインド

次のようなものを使用して、明示的に実装されたプロパティにバインドできることを理解しています。

しかし、インターフェースが汎用の場合はどうなるでしょうか?

魔法の構文とは?

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

c# - 明示的に実装されたインターフェイス メソッドのオーバーライド/非表示

インターフェイスを明示的に実装するメソッドをオーバーライドするのに問題があります。

私は2つのクラスを持っています。と呼ばれる基本的なものとOurViewModel、 と呼ばれる継承されたものMyViewModel。それらは というメソッドを共有してValidateおり、最近までメソッドの基本バージョンを次のように非表示にすることができました。

これはすべて数日前に変更されました。新しいインターフェースが現場に現れました--

続いて、OurViewModel も変更されました。私はこれを要求しませんでしたが、それは起こりました。クラスは次のようになります。

MyViewModel でこの書き換えられた Validate メソッドをオーバーライドまたは非表示にする方法を理解するのに苦労しています。newキーワードをメソッド シグネチャに配置しようとすると(最初に行ったように)、コンパイル エラーが発生します。Validateまた、明示的にインターフェイスを実装しているため、OurViewModel でメソッドを仮想として 宣言することもできません。

何をすべきか?IValidatableObject の署名を使用して MyViewModelに単純に再実装Validateすると、OurViewModel の実装が非表示になりますか、それとも継承規則のために何らかの形で問題が発生するのでしょうか?

0 投票する
5 に答える
352 参照

c# - C# では、インターフェイスの実装で別のバージョンのメソッドを明示的に実装する必要があるのはなぜですか?

次の例を見てください。

キャストなしに変換しても、暗黙的な実装がIFoo Bar()必要なのはなぜですか?FooIFoo

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

c# - C# インターフェイスの明示的な実装により、INotifyPropertyChanged が壊れる

これは少しばかげた質問かもしれませんが、次の問題に対する回避策や解決策を見つけることができませんでした...

コードからわかるように、INotifyPropertyChanged から実装するクラス Example と、1 つのプロパティ A を持つ IExample インターフェイスがあります。

Explicit インターフェイスの実装を使用しているため、 IExample インターフェイスを介してAを参照する必要があります。

そして、それが私の問題です。AIExamle から来ているため、値が変更されたときに明示的にINotifyPropertyChanged発生しません...

これは理にかなっています。

明示的なインターフェイスの実装と INotifyPropertyChanged を維持し、それでも仕事を成し遂げる方法についての考え/アイデアはありますか?

なぜ私がExplicit インターフェイスの実装に夢中になっているのかと疑問に思われるかもしれません

ところで、 INotifyPropertyChanged 実装を自由に批判してください。これは、明示的な継承を処理できるようにするための方法です。

よろしくお願いします。

[編集] 「明示的な継承と明示的なインターフェイスの実装」を変更 - ダニエルのように修正、暗黙の継承コードを追加。明らかに、継承の1つをコメントアウトする必要があります...