問題タブ [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.
java - オブジェクトのArrayListにアップキャストしてから、カスタムArrayListにダウンキャストするコスト
ArrayList of objects
データベースからデータを取得している状況があり、それをアップキャストしてから、別のカスタムArrayListなどList<User>
にダウンキャストしたいと思います。List<Groups>
私の質問は、オブジェクトにアップキャストしてからArrayListにダウンキャストすることです。コストはどうなりますか。それは効率的ですか、それとも良い習慣ですか。
編集済み
データを取得するのではなく、必要に応じて一度だけList<User>, List<Groups>
データを取得したいので、後でArrayList<objetcs>
データをダウンキャストします。ArrayList<User>,
ArrayList<Groups>
f# - FSharpとインターフェイスへのアップキャストは冗長なようです
リアクティブ拡張機能を使用した次のコードスニペットがあります。
これは機能します。ただし、アップキャストをIDisposableにドロップすると、あいまいなオーバーロードが原因で、コードのコンパイルに失敗します。ただし、CompositeDisposableはIDisposableです。型推論エンジンがこれを解決できないのはなぜですか?このパターンは、C#でほぼ常に使用しており、アップキャストせずにObservable.CreateからCompositeDisposableを返します。
c++ - std::dynamic_pointer_cast を使用した std::shared_ptr のアップキャスト
C++0X/11 でスマート ポインターを使い始めたところ、奇妙な状況に遭遇しました。shared_ptr を使用してオブジェクトのインスタンスをアップキャストしたいと考えています。
クラス Extend はクラス Base から継承します。ここで、Base クラスには多態性を持たせるための仮想デストラクタがあります (それ以外の場合、dynamic_pointer_cast は非多態性クラスのキャストについて文句を言います)。
したがって:
そして、私は:
- 安全ですか?
- オブジェクトへの他のポインターはどうなりますか? obj だけがそれを Extend として扱いますが、他の共有ポインタは引き続き Base として扱いますか?
- 同じインスタンスをアップキャストしても安全ですか、それとも何か他のことをする必要がありますか?
編集:答えてくれてありがとう。私がこの質問をした本当の理由は、SAX パーサーを使用して XML ドキュメントを処理することでしたが、アップ/ダウン キャストに夢中になりました。私が欲しかったのは:
しかし、それはまったく意味がありません。代わりに、オブジェクト ファクトリを使用します。
c++ - 関数ポインタをアップキャストしても安全ですか?
私は基本クラスObject
とEvent
そして、関数ポインタの typedef
そして、2 つのポインターを格納する無関係なクラス
次に、具体的なオブジェクトと具体的なイベントがあります
そして、このように呼び出します
ディスパッチャが常に正しいイベントで呼び出されることを保証します。つまり、ディスパッチャがConcreteEvent
カプセル化する関数ポインタが実際にSomeOtherConcreteEvent
問題は次のとおりです。これは動作することが保証されていますか? Linux と mingw の両方で、gcc 4.7 で確実に正常に動作します。
c# - 返された TypeA のオブジェクトを TypeA から派生した型に変換する
「タスク」オブジェクトを返す自分が所有していないメソッドを呼び出しています。メソッドからそのオブジェクトを返したいのですが、そのオブジェクトの Exception プロパティもオーバーライドする必要があります。基になるタスクが例外をキャッチし、ユーザーが Exception プロパティを介してその例外を取得した場合、返された例外で表示されるデータを微調整する必要があります。
リフレクションを介してコピーを行うよりも、この問題に対するより良い解決策があるかどうか疑問に思っています。新しいインスタンスを作成したくありませんが、それを回避する方法が見つかりません。
もう 1 つの可能性は、独自のクラスで Task オブジェクトをラップすることです。しかし、私のメソッドは Task (または派生) オブジェクトを返さないため、下流で問題が発生する可能性があります。Task のすべてのパブリック メンバーを実装し、基本バージョンを呼び出すだけのコードの量は言うまでもありません。
以下のコードは明らかに機能しませんが、概念的には私がやりたいことです:
c# - 派生クラス オブジェクトを基本クラス オブジェクト リストに追加する方法
次のコードでは、Shape から Circle クラスを継承しています。
にどのc
ように追加できますShapeList
か?
f# - F# アップキャストベース
base
doA() を呼び出せるように、適切なインターフェイス タイプ (つまり)にアップキャストしようとすると、解析エラーが発生しA
ます。base
( http://cs.hubfs.net/topic/None/58670 ) が多少特殊であることは認識していますが、これまでのところ、この特定の問題の回避策を見つけることができませんでした。
助言がありますか?
動作する C# に相当するもの:
c# - C#での継承とコンテナー
私はここでC#で働いています、たとえば私が持っているとしましょう:
コードの一部でこのmyListをとしてキャストしたいのですList< A>,
が、しようとするとエラーが発生します。
それを行うことは可能ですか?はいの場合、構文は何ですか?
c++ - ベース ポインターにアップキャストされたオブジェクトの配列の削除
いくつかのライブラリを msvc から mingw に移動し始め、アップキャストされたオブジェクトの配列を削除したい場合の msvc の非常に興味深い動作を発見しました。つまり、msvc はいくつかのダーク マジックを実行し (それを行うのが好きなようです)、次のコードは正常に実行されますが、mingw では (4.7.2( がクラッシュします。mingw は正しく実行されていると思います。スリーパーバグ。
コード:
msvc 2010 からの出力
そしてmingw(破壊時に墜落)
私の質問は、これを修正するための正しいアプローチは何ですか。私が思いついた現在のハックフィックスには、可能なすべてのクラスにダウンキャストしようとし、ダウンキャストされたポインターで削除操作を呼び出すだけでした。
ライブラリを再設計する以外に、より良いアプローチはありますか (それは私のものではありません)。