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

时间:2014-07-04 15:28:13

标签: c#

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

这是父类。它具有两个孩子共有的所有属性。

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%对于这两个类都是相同的。有没有办法可以做到这一点?

1 个答案:

答案 0 :(得分:3)

你在做什么是好的。 Juse使用基类并稍微调整一下:

//
// 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;
}