具有共同抽象基础的对象集合 class
Collection of objects with common Abstract base class
我有一个抽象class叫泛型,实现如下:
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; }
...
}
这是通过几个class实现的,例如:
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";
...
}
}
我想做的是创建一个包含该抽象泛型 class 的不同实例的对象列表。这是我正在尝试做的事情:
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();
由于泛型是抽象的class,它不能被实例化为一个对象。
我的问题是 - 根据我列出的要求,我如何完成我的 objective?我是否应该创建一个新的 class 实现抽象 class 泛型,其唯一目的是实例化泛型类型的列表?这对我来说似乎是一个奇怪的解决方案,但这是我现在唯一能想到的。
对我来说,这看起来像 a class factory。
您需要一个接受 DataRow
的方法,查看它的字段,并决定应该为该行创建 generic
的哪个子 class。然后它创建适当的对象 newObj
、调用 newObj.setParameters(dr)
和 returns newObj
。
最好,实际的工厂方法不采用 DataRow
,而只是一个指示要创建的类型的标量值(整数、字符串等)。
也许class工厂是通过依赖注入传入的;您可以对此进行简单或详细说明。
我有一个抽象class叫泛型,实现如下:
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; }
...
}
这是通过几个class实现的,例如:
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";
...
}
}
我想做的是创建一个包含该抽象泛型 class 的不同实例的对象列表。这是我正在尝试做的事情:
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();
由于泛型是抽象的class,它不能被实例化为一个对象。
我的问题是 - 根据我列出的要求,我如何完成我的 objective?我是否应该创建一个新的 class 实现抽象 class 泛型,其唯一目的是实例化泛型类型的列表?这对我来说似乎是一个奇怪的解决方案,但这是我现在唯一能想到的。
对我来说,这看起来像 a class factory。
您需要一个接受 DataRow
的方法,查看它的字段,并决定应该为该行创建 generic
的哪个子 class。然后它创建适当的对象 newObj
、调用 newObj.setParameters(dr)
和 returns newObj
。
最好,实际的工厂方法不采用 DataRow
,而只是一个指示要创建的类型的标量值(整数、字符串等)。
也许class工厂是通过依赖注入传入的;您可以对此进行简单或详细说明。