私は解決方法がわからず、コミュニティが助けてくれることを望んでいるという問題に直面しています。Cでのダウンキャスト
「リード」オブジェクトを管理するアプリを作成しています。 (これらは販売リードです。)私のプログラムの一部は、テキストファイルからリードをインポートします。現在、テキストファイルには多くの潜在的なリードが含まれていますが、そのうちのいくつかはインポートしたいものと、そうでないものがあります。
簡単にプログラミング(および使用)するために、テキストファイルをList <リードオブジェクトに解析し、DataGridViewを使用して、DataGridViewのDataSourceプロパティを設定してリードを表示します。
「インポート」というグリッドに列を追加するには、各リードをインポートする必要があるかどうかをユーザーがチェックできるチェックボックスを付けます。
私が最初に考えたのは、リードからクラスを派生することです:
public Class LeadWithImportCheckbox : Lead
{
bool bImport = false;
public bool Import { get { return bImport;} set { bImport = value;} } }
しかし、構文解析エンジンは、リードオブジェクトのリストを返します。鉛をLeadWithImportCheckboxに降格することはできません。これは失敗します:
LeadWithImportCheckbox newLead = (LeadWithImportCheckbox)LeadFromParsingEngine;
これは無効なキャストです。
私が見る他のオプションは、LeadWithImportCheckboxのコンストラクタを作成することです:
public LeadWithImportCheckbox(Lead newlead)
{
base.Property1 = newlead.Property1;
base.Property2 = newlead.Property2;
....
base.Property_n = newlead.Property_n;
}
これは、2つの理由から問題です。 1つ目は、Leadオブジェクトには数十のプロパティがあり、このコンストラクタを書くことはPITAです。
さらに悪いことに、Leadの基本構造を変更した場合は、このコンストラクターをLeadWithImportCheckboxに変更することを忘れないでください。これは私のコード管理の危険です。
私の目標を達成する良い方法はありますか?
ランダムな考え:リードが「インポート」されているかどうか(手動入力済み)を追跡することができますか?言い換えれば、「鉛」の永久財産を「輸入」することは実現可能なのだろうか? – Adrien
私はそれが私が追跡したいと思うだろうとは思わない。私はこれで解決できる問題を見ていますが、実際に達成したいことの一部ではありません。 –