Ich habe eine abstrakte Klasse Generika genannt, wie folgt umgesetzt:Sammlung von Objekten mit gemeinsamer Abstrakte Basisklasse
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; }
...
}
Der durch mehrere Klassen implementiert wird, wie zum Beispiel:
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";
...
}
}
Was ich m zu tun versucht, eine Liste von Objekten verschiedener Instanziierungen dieser abstrakten generischen Klasse zu erstellen. Hier ist, was ich bin versucht zu tun:
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;
}
Nun, natürlich ist dies ein Fehler auf der Linie mit Wurf:
generic g = new generic();
Da Generika ist eine abstrakte Klasse, es kann‘ t als Objekt instanziiert werden.
Meine Frage ist - wie erreiche ich mein Ziel, angesichts der Anforderungen, die ich aufgeführt habe? Soll ich eine neue Klasse erstellen, die die abstrakte Klasse generic implementiert, um nur Listen vom Typ generic zu instanziieren? Das scheint für mich eine merkwürdige Lösung zu sein, aber es ist das einzige, woran ich gerade denken kann.
'Was ich versuche zu tun, ist eine Liste von Objekten verschiedener Instanziierungen dieser abstrakten generischen Klasse zu erstellen' Nein, das ist nicht, was dein Code macht. Wenn Sie Ihren Code und Ihre Anforderungen übereinstimmen, haben Sie kein Problem. – SLaks
Sie wollen keine Instanz von 'generic'. Sie möchten eine Instanz einer Unterklasse von 'generic'. Wenn 'getAlerts()' diese 'Liste 'mit mehr als einer anderen Unterklasse füllen könnte, sollte' getAlerts() 'eine Klassenfactory verwenden, die eine' DataRow' betrachtet und entscheidet, welche * Unterklasse * von 'generic' sollte erstellt werden und erstellt es. –
Vielleicht bin ich nicht klar - es gibt viele Klassen, die die abstrakte Klasse generisch implementieren. Datei ist nur einer von ihnen. Mein Datenbankaufruf wird eine Reihe von Zeilen zurückgeben, die verschiedenen Arten von Objekten entsprechen, von denen alle generische implementieren. Ich möchte eine Liste, die alle diese Objekte enthält, und die Liste sollte vom Typ generisch sein. –