Gibt den abgeleiteten Typ in der abgeleiteten Funktion zurück
-
13-11-2019 - |
Frage
Ich habe ein Suchformular, das Abfragen ausführt und Listen von Objekten zurückgibt, die Unterklassen von a sind Kontakt Klasse.
Wenn die Listen in Gridviews verwendet werden, werden Eigenschaften, die nur in Unterklassen vorhanden sind (z. B Anstellungsdatum) werden nicht angezeigt, da die Liste Objekte der Basisklasse (Kontakt).
Gibt es eine Möglichkeit, es zu machen? GetContacts in der Unterklasse eine Liste von zurückgeben Mitarbeiter statt einer Liste von Kontakt ?Oder eine Möglichkeit, die Liste zu „besetzen“. Kontakt in eine Liste von Mitarbeiter ?
Dank im Voraus !
public abstract class Contact
{
public string Name { get; set; }
}
public class Employee : Contact
{
public DateTime HireDate { get; set; }
}
public abstract class ContactManager
{
public abstract List<Contact> GetContacts(string searchValue);
}
public class EmployeeManager : ContactManager
{
public abstract List<Contact> GetContacts(string searchValue);
}
Lösung
ja, generics kann hier helfen: generasacodicetagpre.
Alternativ können Sie die Linq vonType-Methode verwenden, um alle zu erhaltenKontakte eines gewünschten Typs aus Ihrer Sammlung: generasacodicetagpre.
Andere Tipps
Sie könnten Generika verwenden, etwa so:
public abstract class ContactManager<TContactType>
where TContactType : Contact
{
public abstract List<TContactType> GetContacts(string searchValue);
}
public abstract class EmployeeManager : ContactManager<Employee>
{
...
}
Dadurch können Sie einschränken ContactManager
um mit einem bestimmten Basistyp zu arbeiten (d. h Contact
) und verwenden Sie weiterhin den spezifischen Typ (von Contact
), um einen Drilldown mit starker Eingabe durchzuführen, zum Beispiel mit Employee
.