問題タブ [downcast]

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

c++ - 仮想ベースからのダウンキャストとクロスキャストのどちらが速いですか?

私はパフォーマンスについてあまり心配していないので、これはやや仮説的なものです。実際にどのオプションが一般的に最速/最も効率的か、またはまったく違いがないかどうか疑問に思っています。

オーバーロードをサポートするビジター テンプレートの次のコードがあるとします。

次に、これを使用して一般的な訪問者を作成します。

訪問者を使用すると、最終的にクロスキャストであるdynamic_cast<>from Visitortoになります。VTarget<T>

これを実装できるもう 1 つの方法は、仮想ベースを作成することですVisitor。これにより、Visitor から直接継承する必要がなくなります。Visitor::visit コードのは、仮想ベースからのダウンキャストになります。VTarget<T>MyVisitordynamic_cast<>Visitor

キャストを実行するとき、あるメソッドは他のメソッドよりも高速ですか? それとも、仮想ベースを持つことでサイズのペナルティを受けるだけですか?

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

c# - Entity Framework によるダウンキャスト

Employerの派生クラスとしてEF で定義したプロジェクトがありUserます。私のプロセスでは、最終的に雇用主 (または他の種類のユーザー) になるかどうかを知らずにユーザーを作成し、後で変換する必要があります。最初に試しました(Intellisenseは明示的な変換が存在することを示しました):

しかし、実行時に私は得ました:

だから私はコンバーターを書こうとしました:

しかし、私はエラーが発生します:

大丈夫。次に、コンストラクターを次のEmployerようにオーバーロードしました。

そして、私ができることを考えました:

しかし、実行するとエラーが発生します:

最後の手段として、私はこれを書いてみました:

User... GetUser() は提供しないタイプのオブジェクトを返す.Cast<>ので、そこに到達するために直接クエリを使用しました...しかし、それでも動的プロキシ オブジェクトのキャスト例外が発生します。

だから私の質問は:オブジェクトがEFを介して永続性を持っている場合、どうすればダウンキャストできますか?

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

c++ - 仮想継承が関係している場合、static_cast を使用してダウンキャストできないのはなぜですか?

次のコードを検討してください。

これは標準 ( ) で禁止されているため、実質的にから継承される[n3290: 5.2.9/2]ため、コードはコンパイルされません。を継承から削除すると、コードが有効になります。Derived Basevirtual

このルールが存在する技術的な理由は何ですか?

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

c# - インターフェイスのダウンキャスティング

IEnumerable:の評価を強制できるようにするために、次の拡張方法があると仮定してください。

IList<T>このメソッドの戻り型(つまり、インターフェイスへのダウンキャスト)の代わりにList<T>、メソッドとその依存関係を特定の実装に結び付けない(つまり、戻り値が常に実際にある場合でも)ことに意味があるかどうかを尋ねたいと思います。 a List)。

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

java - 実際のタイプによる方法の使用

次のように、オブジェクトの実際のタイプを使用して、使用するメソッドを定義できることを学びました。

これでメソッドを使用する必要がありますbla(String x)が、代わりにコンパイラエラーが発生します。私は理由を知っています:タイプfooが現在であるためObject。現在正しく行っているかどうかはわかりませんが、Javaは実際のタイプ(または特定のタイプ)でメソッドを選択するので、ダウンキャストすると代わりにObject選択されます。メソッドが指定されています。StringObject

または、メソッドでタイプを判別する唯一if(foo instanceof xxx)の方法ですvoid bla(Object x)?

PS:これについて誤解しないでください:メソッドをオーバーロードできるという意味ではありません。つまり、(定義されたタイプではなく)実際のタイプに基づいてメソッドを選択したいということです。

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

actionscript-3 - Actionscript 3.0 タイプのダウンキャストの問題

MovieClip を拡張する新しいクラスを実装しました。その名前はbase.MovieClipWithDelays(「ベース」はパッケージ名です)です。

私のシーンには、 という名前のオブジェクトが含まれていますBlahSymbol Properties私はチェックボックスExport for ActionScriptをオンにしExport in first frameました。クラス名を に設定しましT_Idle_0た。そして、それを Base クラスとして指定しましたbase.MovieClipWithDelays

問題は、次のコードが型エラーにつながることです。

それは出力します:

ご覧のとおり、スーパークラス名は問題ありません。それにもかかわらず、それをダウンキャストすることはできません。どうすればそれが可能になり、どうすれば回避できますか?

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

c++ - ベースから派生への動的キャストがポリモーフィッククラスでのみ許可される理由

重複の可能性:
FAQ:クラスに少なくとも1つの仮想メソッドがある場合にのみdynamic_castが機能するのはなぜですか?

C ++では、クラスのセットの階層を下って動的キャストを実行すると、基本クラスが仮想関数を持っている場合など、クラスがポリモーフィックである状況でのみキャストが許可されることを読みました。この制限の理由は?基本クラスの通常の仮想関数の代わりに純粋仮想関数を使用する方が「安全」ですか?

ありがとう!

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

java - Javaダウンキャスティング

こんにちはこのようなクラスが1つあります

そして、メッセージクラス

そして1つのサブクラス

私のコードにはこれがあります:

そしてそれは私にこのエラーを与えます:

Exception in thread "main" java.lang.ClassCastException: Message cannot be cast to SMS

SMSにメッセージをダウンキャストしてSMSのshowMessage()メソッドを使用することはできませんか?

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

c++ - オブジェクト (ポインターではなく) を既知の派生型にダウンキャストしても安全ですか?

スライスの危険性はありますか

どこ

obj1とはオブジェクトobj2であることが保証されていBlockますか?

私は使いたくなる:

しかし、SO の object-slicing タグの簡単な説明を読むと、前者を使用したくなります。しかし、厄介なサイレントスライスは本当に望んでいません。

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

c++ - メッセージパッシングでのダウンキャストを回避するためのデザインパターン

基本クラスMessageHandlerには派生クラスがあります。彼らはお互いにメッセージを伝えたいと思っています。メッセージは異なるクラスのものである可能性がありますが、基本クラスを共有するように作成することができます。MessageHandler受信したメッセージのダウンキャストを回避するにはどうすればよいですか?receiveMessageMessageHandlerの仮想関数をテンプレートパラメータ化する効果がある何かを行うことはどういうわけか可能ですか?

基本的に、私は次のコードをダウンキャストしないものに置き換えようとしています。できればコンパイル時のものです。

私はこれができないことを知っていますが、

そして、それぞれがDerivedMessageHandler専門にしていMますか?各ハンドラーがサポートされているメッセージオブジェクトをきれいに処理できるようにするデザインパターンは何でしょうか。