問題タブ [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++ - 基本クラス (インターフェイス) を介したアクセスを許可し、派生クラス (具体的な実装) を介したアクセスを禁止しますか?
IHandler
純粋な抽象クラスとそれから派生したクラスがあるとしましょう:
MyEngine でそのクラスを継承して、MyEngine*
期待しているすべての人に渡してIHandler*
、それらを使用できるようにしたいと考えていますprocess_input
。ただし、MyEngine*
実装の詳細を公開したくないため、アクセスを許可したくありません。
これは、保護された継承と暗黙のキャストを介して行うことができますか? 私はなんとか得ることができました:
「MyEngine *」から「IHandler *」への変換は存在しますが、アクセスできません
私は C# のバックグラウンドを持っているので、これは基本的に C# での明示的なインターフェイスの実装です。これは C++ で有効なアプローチですか?
追加:
なぜこれをやりたいのかをよりよく理解するために、次のことを検討してください。
クラスTcpConnection
は TCP を介した通信を実装し、そのコンストラクターには interface へのポインターが必要ITcpEventHandler
です。ソケットでデータを取得するTcpConnection
と、そのデータをITcpEventHandler
usingに渡します。ITcpEventHandler::incomingData
または、送信データをポーリングするときに、 uses を渡しますITcpEventHandler::getOutgoingData
。
私のクラスHttpClient
はTcpConnection
(集約)を使用してTcpConnection
コンストラクターに渡し、それらのインターフェースメソッドで処理を行います。
したがって、これらのメソッドを実装する必要がありますが、使用しているユーザーがメソッド ( 、 )に直接アクセスできるようにしTcpConnection
たくありません。電話をかけたり、直接電話したりできないようにする必要があります。HttpClient
ITcpEventHandler
incomingData
getOutgoingData
incomingData
getOutgoingData
これが私のユースケースを明確にすることを願っています。
c# - ゲッターを公開しながら、プロパティ セッターを明示的に実装することは可能ですか?
書き込み専用プロパティを含むインターフェイスを定義すると、次のようになります。
プロパティが公開されているゲッターを持つことを意図して、明示的に実装しようとします。
次に、次のエラーが表示されます。
エラー 'IModuleScreenData.Name.get' は、インターフェイス メンバー 'IModuleScreenData.Name' に見つからないアクセサーを追加します
ただし、この代替構文の後では、エラーは多かれ少なかれ予想されます。
コンパイルに失敗しました。私がやろうとしていることは実際には不可能だと思います。私は正しいですか、それとも秘密のソース構文がありますか?
aop - PostSharp 属性マルチキャストで明示的なインターフェイス メソッドを除外する
私がインターフェースを持っているとしましょう:
これは、いくつかのクラスによって実装されています。
PostSharp 属性マルチキャストを使用して、アスペクト ( MySecurityAspect
) を名前空間内の各クラスに適用しています。
ただし、明示的なインターフェイス メソッドの実装を除外する方法がわかりません。
このステートメントを使用して、こちらのドキュメントに従ってみました:
しかし、これはうまくいかないようです。
明示的なインターフェイスの実装である場合、属性マルチキャストを使用するメソッドを除外するにはどうすればよいですか?
c# - 明示的なインターフェイスを宣言し、定義エラー C# が含まれていない
作成した明示的なインターフェイスに問題があり、例外が発生しています。
'x' には 'y' の定義が含まれておらず、タイプ 'x' の最初の引数を受け入れる拡張メソッド 'y' が見つかりませんでした
私は一連のクラスを持っています。基本クラス:
それを明示的に実装するクラス:
別のクラスでは、上記のエラーが発生します。Visual Studio はインターフェイスとクラスを正常に検出できますが、インスタンス プロパティを解決できません。ここで何が欠けていますか。明示的な継承のより洗練されたルールの 1 つが欠けている可能性があります。
c# - 自動プロパティを使用した明示的なオーバーライド
C++/CLI 自動実装プロパティを使用して、インターフェイスを明示的にオーバーライドしようとしています。特に、私は (C++/CLI で) 書いています。
IInterface
C# で明示的に使用するには、次のように記述します。
C++/CLI は EII をサポートしていませんが、明示的なオーバーライドをサポートしています。たとえば、次のように書くことができます
自動実装プロパティを使用して明示的なオーバーライドを定義したいのですが、
コンパイラ エラーC2146
:;
識別子の前にありませんObject
、C2433
:virtual
データ宣言では許可されていません、C4430
: 型指定子がありません、およびC3766
: インターフェイス メンバーが実装されていません。何か不足していますか?私が求めるものを達成するための適切な C++/CLI 構文は何ですか?
c# - 明示的なインターフェイスで実装されたメソッドを単体テストする方法は?
サービスに次のメソッドがありますが、単体テストで呼び出すことができません。メソッドはasync/ await
コードを使用しますが、(そして私が問題を引き起こしていると思います)ドット表記のメソッドの名前があり、それが正直に何をするのかわかりませんか?以下の私の例を参照してください
実装
単体テスト
アップデート
提案を試しましたが、次のエラーメッセージでコンパイルされません
c++ - C++ - 明示的および暗黙的な名前空間の実装の違い
誰かが私を啓発できるなら、名前空間について質問があります:D
タイトルが正しいかどうかわかりませんが、そう願っています xD
「.cpp」ファイルのコードは名前空間の実装と呼ばれ、「.h」ファイルのコードは名前空間の宣言と呼ばれます。右?:/
とにかく、私の質問は:
名前空間メンバーの明示的または暗黙的な実装 (「.cpp」ファイル内) による違いはありますか?
つまり、「 MyNamespace.h 」にこの名前空間があるとしましょう:
「MyNamespace.cpp」でこれを行うと、違いがあります(暗黙の実装):
またはこれ(明示的な実装):
?
どうもありがとう:D
素敵な一日と素敵なコーディングを!(: