动态创建具有公共属性的对象

本文关键字:属性 对象 创建 动态 | 更新日期: 2023-09-27 18:11:33

我想在运行时实例化从同一父类继承的两个类中的一个。

是父类。它具有两个子元素共有的所有属性。

public class Applicant
{
    public int ApplicantID { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    //etc
}

从它继承的两个类具有使它们不同的属性

public class PilotApplicant : Applicant
{
    public byte[] SSN { get; set; }
    public string EthnicExplain { get; set; }
    public byte[] CryptoKey { get; set; }
    public byte[] CryptoIV { get; set; }
}
public class CMSApplicant : Applicant
{
    public string LocationName { get; set; }
}

这是我想要做的,或者像这样:

switch (Host)
{
    case "pilot":
        currentApplicant = new PilotApplicant();
        break;
    case "cms":
        currentApplicant = new CMSApplicant();
        break;
}
currentApplicant.ApplicantID = Convert.ToInt32(oReader["ApplicantID"]);
currentApplicant.FirstName = oReader["FirstName"].ToString();
currentApplicant.LastName = oReader["LastName"].ToString();
currentApplicant.MiddleName = oReader["MiddleName"].ToString();

基本上,我试图避免为类单独设置所有属性,因为99%的属性对于两个类都是相同的。我能做到吗?

动态创建具有公共属性的对象

你所做的是好的。只需使用基类并稍微调整一下:

//
// Use base class here
//
Applicant currentApplicant;
switch (Host)
{
    case "pilot":
        currentApplicant = new PilotApplicant();
        // set values for pilot
        break;
    case "cms":
        CMSApplicant cmsApplicant = new CMSApplicant();
        currentApplicant = cmsApplicant;
        cmsApplicant.LocationName = (string)oReader["LocationName"];
        break;
    default:
       currentApplicant  = null;
       break;
}
相关文章: