具有公共抽象基类的对象的集合

时间:2017-07-10 19:44:03

标签: c# list abstract-class instantiation

我有一个名为generic的抽象类,实现如下:

public abstract class generic
{
    public string creatorID { get; set; }
    public string itemID { get; set; }
    public string name { get; set; }
    public DateTime creationDate { get; set; }
    public string pageName { get; set; }
    ...
}

这是通过几个类实现的,例如:

public class file : generic
{
    public file(string _itemID, string host, string languageReferenceID)
    {
        DataTable dt = GetRecordsFromDatabase(string _itemID, string host, string languageReferenceID);
        if (dt.Rows.Count > 0)
            setParameters(dt.Rows[0]);
        ...
    }

    private void setParameters(DataRow dr)
    {
        creatorID = dr["f_MemberID"].ToString();
        itemID = dr["f_ID"].ToString();
        name = dr["f_Name"].ToString();
        creationDate = DateTime.Parse(dr["f_DateCreated"].ToString());
        pageName = "files";
        ...
    }
}

我要做的是创建该抽象泛型类的不同实例化的对象列表。这是我正在尝试做的事情:

    public List<generic> getAlerts(string host, string languageReferenceID)
    {            
        DataTable dt = GetAlertsFromDatabase(host, languageReferenceID);

        List<generic> alertList = new List<generic>();

        foreach (DataRow dr in dt.Rows)
        {
            generic g = new generic();

            g.itemID = dr["itemID"];
            g.description = dr["description"];
            g.pageName = dr["pageName"];

            g.Add(m);
        }

        return alertList;
    }

现在,当然,这会在以下行中引发错误:

generic g = new generic();

由于generic是一个抽象类,因此无法将其实例化为对象。

我的问题是 - 考虑到我列出的要求,我如何实现目标?我应该创建一个实现抽象类泛型的新类,其唯一目的是实例化类型泛型的列表吗?这对我来说似乎是一个奇怪的解决方案,但这是我现在唯一能想到的。

1 个答案:

答案 0 :(得分:2)

对我而言,这看起来像a class factory

您需要一个采用DataRow的方法,查看其字段,并决定应为该行创建generic的哪个子类。然后,它会创建相应的对象newObj,调用newObj.setParameters(dr),然后返回newObj

优选地,实际工厂方法不采用DataRow,而是采用指示要创建的类型的一个标量值(int,string,whatever)。

也许类工厂是通过依赖注入传入的;你可以简单或详细说明这一点。