問題タブ [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.
c++ - C++Builder2009 でポインターを void* から TMemo* に正しくダウンキャストするにはどうすればよいですか?
C++Builder 2009 でマルチスレッド ソケット チャットを作成し
ています。必要な作業はほぼ完了していますが、少し問題があります。TMemo* ポインターを void* にアップキャストする CreateThread WinAPI 関数に渡す必要があります。
私はこの方法を試しました:
そして、NetThread 関数で、
しかし、うまくいきませんでした:(
問題は、この新しいスレッドでメモ コンポーネントを使用できるように、正しくダウンキャストするにはどうすればよいかということです。
c# - ダウンキャストを回避することは可能ですか?
次のようないくつかのユーザー定義型を定義して使用するロジックがあります。
ロジックは、タイプを使用して計算を行った後 (各Word
インスタンスを検索するなど)、メソッドSystem
を呼び出すなどして、いくつかの API を間接的に使用しますCanvass.draw
。
このロジックを名前空間から独立させたいと思いSystem.Drawing
ます。ほとんどの場合、単体テストを支援するためです (draw
メソッドが実際のインスタンス以外のものに描画されている場合、単体テストの出力を確認する方が簡単だと思いSystem.Drawing.Graphics
ます)。
ロジックのネームスペースへの依存を排除するために、型System.Drawing
のプレースホルダーとして機能するいくつかの新しいインターフェイスを宣言すると考えました。次に例を示します。System.Drawing
これを行った場合、さまざまなアセンブリにIMyFont
andIMyGraphics
インターフェイスのさまざまな実装が含まれる可能性があります。たとえば...
...ただし、実装には上記のようにダウンキャストが必要です。
私の質問は、実装でダウンキャストを必要とせずにこれを行う方法はありますか? 「これ」とは、「特定の具体的な型に依存しないような UDT を定義する」ことを意味Word
しCanvass
ますSystem
か?
代替手段は抽象UDTです...
...しかし、これもサブクラスの実装でダウンキャストが必要になります。
また、ダブル ディスパッチ イディオムを使用することも考えましたが、API でさまざまなサブクラスに名前を付けることに依存しています。
または、インターフェイスまたはサブクラスを使用しない場合、デリゲートを使用する方法はありますか?
- 編集: -
考えられる答えは 2 つあります。
1つの答えは、ジェネリックを使用することです。これは、以下の「Sir Lantis」の回答で示唆されているとおり、およびJohn Skeetがリンクしているブログ投稿で示唆されているとおりです。これはほとんどのシナリオでうまくいくと思います。私の観点からのマイナス面はTFont
、テンプレートパラメータとして導入することを意味することです:それは、ジェネリッククラス(のような)になる必要がWord
あるのは、(インスタンスを含む)のようなクラスだけではありません...それはまた、(eg )を含むクラスも、パラメーター (eg ) を使用してジェネリックにする必要があります。最終的に、アセンブリ内のほぼすべてのクラスがジェネリック クラスになりました。これにより、タイプセーフが維持され、ダウンキャストの必要がなくなります...しかしFont
WordT<TFont>
WordT<TFont>
Paragraph
TFont
ParagraphT<TFont>
それは一種の醜いものであり、カプセル化の錯覚 (「フォント」が不透明な実装の詳細であるという錯覚) を妨げます。
もう 1 つの答えは、ユーザー クラスでマップまたは辞書を使用することです。再利用可能なライブラリの代わりFont
に、抽象インターフェイスの代わりに、次のような「ハンドル」クラスを定義します。
次に、からダウンキャストする代わりに、値をインスタンスにマップFontHandle
するインスタンスを保持します。Dictionary<int, Font>
FontHandle
Font
objective-c - Objective-C では、Java の「instanceof」キーワードに相当するものは何ですか?
someObject
オブジェクト (例: ) が別の型の変数 (例: ) に割り当て可能 (キャスト可能)かどうかを確認したいと思いますSpecifiedType
。Java では、次のように記述できます。
関連する質問は、オブジェクトの実行時の型が別の型と等しいかどうかを調べることです。Java では、次のように記述できます。
Objective-Cでこれを行うにはどうすればよいですか?
c# - ダウンキャストを避けるためにこのデザインを変更するにはどうすればよいですか?
基本クラスからすべて継承するオブジェクトのコレクションがあるとします。何かのようなもの...
今、私たちはこれらの動物に餌をやる必要がありますが、彼らは自分自身を養う方法を知ることは許されていません. 可能であれば、答えは簡単です。
しかし、彼らは自分自身を養う方法を知ることができないので、次のようなことをしたいと考えています:
もちろん、ダウンキャストを強制するため、これはコンパイルされません。
この問題を解決するのに役立つジェネリックを使用した設計パターンまたはその他のソリューションがあるように感じますが、まだ指を置いていません。
提案?
c# - 明示的な型キャストを使用して、基本クラスオブジェクトを派生クラス参照に割り当てることは可能ですか?
C#で明示的な型キャストを使用して、基本クラスオブジェクトを派生クラス参照に割り当てることは可能ですか?
試してみましたが、実行時エラーが発生します。
c# - C# でのダウンキャスト
解決方法がわからない問題に直面しており、コミュニティが助けてくれることを願っています。
「リード」オブジェクトを管理するアプリを書いています。(これらはセールス リードです。) 私のプログラムの一部では、テキスト ファイルからリードをインポートします。これで、テキスト ファイルには多くの見込み顧客が含まれており、インポートしたいものもあれば、インポートしたくないものもあります。
プログラミング (および使用) を容易にするために、テキスト ファイルを List<Lead> オブジェクトに解析し、DataGridView の DataSource プロパティを設定してリードを表示するために DataGridView を使用しています。
私がやりたいことは、「インポート」と呼ばれる列をグリッドに追加し、ユーザーが各リードをインポートする必要があるかどうかを示すためにチェックできるチェックボックスを追加することです。
私の最初の考えは、Lead からクラスを派生させることです。
ただし、解析エンジンは Lead オブジェクトのリストを返します。リードを LeadWithImportCheckbox にダウンキャストできません。これは失敗します:
私が見る他のオプションは、LeadWithImportCheckbox のコンストラクターを作成することです。
さらに悪いことに、Lead の基になる構造を変更した場合は、LeadWithImportCheckbox のこのコンストラクターを変更することを忘れないでください。これは私のコードのメンテナンスにとって危険です。
私の目標を達成するためのより良い方法はありますか?
c# - ダウンキャストの代替としてのコンストラクターのベースオブジェクト
基本オブジェクト(RTUDevice)のリストがあり、それぞれを反復して派生オブジェクト(実際には派生RTDSensorの派生)に変換したいのですが、ダウンキャストによってエラーがスローされます。
コンストラクターのベースオブジェクトを次のようなRTDSensorに渡す方がよいでしょうか。
または、私のOOP設計は的外れです。
java - Java インターフェイスを *任意の* 非最終クラスにキャストできるのはなぜですか?
上記のコード サンプルでは、コレクション オブジェクトを Test オブジェクトにキャストしています。(null ポインターを無視します)。Test はCollection とは何の関係もありませんが、このプログラムはすべてのコンパイル時のチェックに合格します。
これはなぜだろうと思います。私の推測では、インターフェイスは複雑すぎるため無視されます。それらには共通のスーパータイプがなく、各クラスは複数のインターフェースを実装できるため、クラス/インターフェース階層が複雑すぎて効率的に検索できませんか?
その理由以外は、私は困惑しています。誰か知っていますか?!
c# - ダウンキャストとアップキャスト
私はC#(およびOOP)が初めてです。次のようなコードがある場合:
質問 1 : これを行う他のコードがある場合:
ここEmployee
に がありますがManager
、そのようにキャストすると、Employee
それはアップキャストされていることを意味しますか?
質問 2 :
いくつかのEmployee
クラス オブジェクトがあり、すべてではないものの一部がManager
である場合、可能であればそれらをダウンキャストするにはどうすればよいですか?
oop - 参照オブジェクトをダウンキャストするときにMOVE_CAST_ERRORが発生する原因は何ですか?
保護されたインスタンス化を使用して親クラスから継承するクラスを作成しています。スーパークラスには、クラスのインスタンスを提供する静的メソッドがあります。
次のコードは実行時エラーを引き起こしますMOVE_CAST_ERROR
:
私も試しました:
私は過去に他のオブジェクトタイプとのダウンキャストに成功しました-2つのクラスを互換性のないものにする可能性のあるZPARENTまたはZCHILDで何を探すべきか考えている人はいますか?
現在、ZCHILDには追加のメソッドが1つしかないため、スーパークラスに追加すると、クラスの抽象化が破られるため、私はそれほど熱心ではありません。