Question

J'ai un formulaire de recherche qui exécute des requêtes renvoyant des listes d'objets qui sont des sous-classes d'un Contact classer.

Lorsque les listes sont utilisées dans GridViews, les propriétés qui n'existent que dans les sous-classes (comme Date d'embauche) ne sont pas affichés car la liste contient des objets de la classe de base (Contact).

Y a-t-il un moyen de faire GetContacts Dans la sous-classe, renvoie une liste de Employé au lieu d'une liste de Contact ? Ou un moyen de "lancer" la liste de Contact dans une liste de Employé ?

Merci d'avance !

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);  
} 
Était-ce utile?

La solution

Oui, les génériques peuvent aider ici:

public abstract class ContactManager<T> where T : Contact
{  
  public abstract List<T> GetContacts(string searchValue);  
}

public class EmployeeManager : ContactManager<Employee>
{  
  public abstract List<Employee> GetContacts(string searchValue);  
}

Alternativement, vous pouvez utiliser le Méthode Linq de Type Pour obtenir tous les contacts d'un type souhaité de votre collection:

IEnumerable<Employee> employees = contactManager.GetContacts("someSearchValue").OfType<Employee>();

Autres conseils

Vous pouvez utiliser des génériques, quelque chose comme ceci:

public abstract class ContactManager<TContactType> 
    where TContactType : Contact 
{
    public abstract List<TContactType> GetContacts(string searchValue);  
}

public abstract class EmployeeManager : ContactManager<Employee> 
{
    ...
}

Cela vous permet de contraindre ContactManager pour travailler avec un type de base spécifique (c.-à-d. Contact) et utiliser davantage le type spécifique (de Contact) pour explorer avec un dactylographie forte, par exemple, avec Employee.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top