The*_*eek 6 c# inheritance downcast
我正面临一个我不知道如何解决的问题,希望社区可以提供帮助.
我正在编写一个管理"Lead"对象的应用程序.(这些是销售线索.)我的程序的一部分将从文本文件中导入潜在客户.现在,文本文件包含许多潜在的潜在客户,其中一些我想要导入,其中一些我不会.
为了便于编程(和使用),我将文本文件解析为List <Lead>对象,并使用DataGridView通过设置DataGridView的DataSource属性来显示潜在客户.
我想要做的是在网格中添加一个名为"导入"的列,其中包含一个复选框,用户可以选中该复选框以指示是否应导入每个导联.
我的第一个想法是从Lead派生一个班级:
public Class LeadWithImportCheckbox : Lead
{
bool bImport = false;
public bool Import { get { return bImport;} set { bImport = value;} } }
LeadWithImportCheckbox newLead = (LeadWithImportCheckbox)LeadFromParsingEngine;这是一个无效的演员表.
我看到的另一个选项是为LeadWithImportCheckbox创建一个构造函数:
public LeadWithImportCheckbox(Lead newlead)
{
base.Property1 = newlead.Property1;
base.Property2 = newlead.Property2;
....
base.Property_n = newlead.Property_n;
}
出于两个原因,这是有问题的.一,Lead对象有几十个属性,编写这个构造函数是PITA.
但更糟糕的是,如果我更改了Lead的底层结构,我需要记住返回并更改LeadWithImportCheckbox的构造函数.这对我的代码维护是一个危险.
有没有更好的方法来实现我的目标?
或者,为了避免PITA方面,使用反射......(试试这个...)
编辑:使用属性,而不是我最初写的字段...
public class NewLead : Lead
{
public bool Insert;
public NewLead(Lead lead, bool insert)
{
Insert = insert;
foreach (PropertyInfo pi in typeof(Lead).GetProperties())
GetType().GetProperty(pi.Name).SetValue
(this, pi.GetValue(lead,null), null);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6813 次 |
| 最近记录: |