Pregunta

Tengo un formulario de búsqueda que ejecuta consultas que devuelven listas de objetos que son subclases de un Contacto clase.

Cuando las listas se utilizan en vistas de cuadrícula, las propiedades que solo existen en subclases (como Fecha de contratación) no se muestran porque la lista contiene objetos de la clase base (Contacto).

¿Hay alguna manera de hacer ObtenerContactos en la subclase devuelve una lista de Empleado en lugar de una lista de Contacto ?O una forma de "lanzar" la lista de Contacto en una lista de Empleado ?

Gracias de antemano !

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);  
} 
¿Fue útil?

Solución

Sí, los genéricos pueden ayudar aquí:

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);  
}

Alternativamente, puede usar la Método LINQ OFTYPE para obtener todosContactos de un tipo deseado de su colección:

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

Otros consejos

Podrías usar genéricos, algo como esto:

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

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

Esto le permite restringir ContactManager para trabajar con un tipo de base específico (es decir, Contact) y utilizar además el tipo específico (de Contact) para profundizar con escritura fuerte, por ejemplo, con Employee.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top