問題タブ [upcasting]

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

java - オブジェクトのArrayListにアップキャストしてから、カスタムArrayListにダウンキャストするコスト

ArrayList of objectsデータベースからデータを取得している状況があり、それをアップキャストしてから、別のカスタムArrayListなどList<User>にダウンキャストしたいと思います。List<Groups>

私の質問は、オブジェクトにアップキャストしてからArrayListにダウンキャストすることです。コストはどうなりますか。それは効率的ですか、それとも良い習慣ですか。

編集済み

データを取得するのではなく、必要に応じて一度だけList<User>, List<Groups>データを取得したいので、後でArrayList<objetcs>データをダウンキャストします。ArrayList<User>, ArrayList<Groups>

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

f# - FSharpとインターフェイスへのアップキャストは冗長なようです

リアクティブ拡張機能を使用した次のコードスニペットがあります。

これは機能します。ただし、アップキャストをIDisposableにドロップすると、あいまいなオーバーロードが原因で、コードのコンパイルに失敗します。ただし、CompositeDisposableはIDisposableです。型推論エンジンがこれを解決できないのはなぜですか?このパターンは、C#でほぼ常に使用しており、アップキャストせずにObservable.CreateからCompositeDisposableを返します。

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

c++ - std::dynamic_pointer_cast を使用した std::shared_ptr のアップキャスト

C++0X/11 でスマート ポインターを使い始めたところ、奇妙な状況に遭遇しました。shared_ptr を使用してオブジェクトのインスタンスをアップキャストしたいと考えています。

クラス Extend はクラス Base から継承します。ここで、Base クラスには多態性を持たせるための仮想デストラクタがあります (それ以外の場合、dynamic_pointer_cast は非多態性クラスのキャストについて文句を言います)。

したがって:

そして、私は:

  1. 安全ですか?
  2. オブジェクトへの他のポインターはどうなりますか? obj だけがそれを Extend として扱いますが、他の共有ポインタは引き続き Base として扱いますか?
  3. 同じインスタンスをアップキャストしても安全ですか、それとも何か他のことをする必要がありますか?

編集:答えてくれてありがとう。私がこの質問をした本当の理由は、SAX パーサーを使用して XML ドキュメントを処理することでしたが、アップ/ダウン キャストに夢中になりました。私が欲しかったのは:

しかし、それはまったく意味がありません。代わりに、オブジェクト ファクトリを使用します。

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

c++ - 関数ポインタをアップキャストしても安全ですか?

私は基本クラスObjectEvent

そして、関数ポインタの typedef

そして、2 つのポインターを格納する無関係なクラス

次に、具体的なオブジェクトと具体的なイベントがあります

そして、このように呼び出します

ディスパッチャが常に正しいイベントで呼び出されることを保証します。つまり、ディスパッチャがConcreteEventカプセル化する関数ポインタが実際にSomeOtherConcreteEvent

問題は次のとおりです。これは動作することが保証されていますか? Linux と mingw の両方で、gcc 4.7 で確実に正常に動作します。

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

c# - 返された TypeA のオブジェクトを TypeA から派生した型に変換する

「タスク」オブジェクトを返す自分が所有していないメソッドを呼び出しています。メソッドからそのオブジェクトを返したいのですが、そのオブジェクトの Exception プロパティもオーバーライドする必要があります。基になるタスクが例外をキャッチし、ユーザーが Exception プロパティを介してその例外を取得した場合、返された例外で表示されるデータを微調整する必要があります。

リフレクションを介してコピーを行うよりも、この問題に対するより良い解決策があるかどうか疑問に思っています。新しいインスタンスを作成したくありませんが、それを回避する方法が見つかりません。

もう 1 つの可能性は、独自のクラスで Task オブジェクトをラップすることです。しかし、私のメソッドは Task (または派生) オブジェクトを返さないため、下流で問題が発生する可能性があります。Task のすべてのパブリック メンバーを実装し、基本バージョンを呼び出すだけのコードの量は言うまでもありません。

以下のコードは明らかに機能しませんが、概念的には私がやりたいことです:

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

c# - 派生クラス オブジェクトを基本クラス オブジェクト リストに追加する方法

次のコードでは、Shape から Circle クラスを継承しています。

にどのcように追加できますShapeListか?

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

f# - F# アップキャストベース

basedoA() を呼び出せるように、適切なインターフェイス タイプ (つまり)にアップキャストしようとすると、解析エラーが発生しAます。base( http://cs.hubfs.net/topic/None/58670 ) が多少特殊であることは認識していますが、これまでのところ、この特定の問題の回避策を見つけることができませんでした。

助言がありますか?

動作する C# に相当するもの:

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

c# - C#での継承とコンテナー

私はここでC#で働いています、たとえば私が持っているとしましょう:

コードの一部でこのmyListをとしてキャストしたいのですList< A>,が、しようとするとエラーが発生します。

それを行うことは可能ですか?はいの場合、構文は何ですか?

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

c++ - ベース ポインターにアップキャストされたオブジェクトの配列の削除

いくつかのライブラリを msvc から mingw に移動し始め、アップキャストされたオブジェクトの配列を削除したい場合の msvc の非常に興味深い動作を発見しました。つまり、msvc はいくつかのダーク マジックを実行し (それを行うのが好きなようです)、次のコードは正常に実行されますが、mingw では (4.7.2( がクラッシュします。mingw は正しく実行されていると思います。スリーパーバグ。

コード:

msvc 2010 からの出力

そしてmingw(破壊時に墜落)

私の質問は、これを修正するための正しいアプローチは何ですか。私が思いついた現在のハックフィックスには、可能なすべてのクラスにダウンキャストしようとし、ダウンキャストされたポインターで削除操作を呼び出すだけでした。

ライブラリを再設計する以外に、より良いアプローチはありますか (それは私のものではありません)。