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);  
} 
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top