Pergunta

Tenho um formulário de busca que executa consultas retornando listas de objetos que são subclasses de uma Contato aula.

Quando as listas são usadas em gridviews, propriedades que existem apenas em subclasses (como Data de contratação) não são exibidos porque a lista contém objetos da classe base (Contato).

Existe uma maneira de fazer ObterContatos na subclasse retorne uma lista de Funcionário em vez de uma lista de Contato ?Ou uma forma de "lançar" a lista de Contato em uma lista de Funcionário ?

Desde já, obrigado !

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

Solução

Sim, os genéricos podem ajudar aqui:

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, você pode usar o Método LINQ OfType para obter todos os contatos de um tipo desejado da sua coleção:

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

Outras dicas

Você poderia usar genéricos, algo assim:

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

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

Isso permite que você restrinja ContactManager para trabalhar com um tipo de base específico (ou seja, Contact) e ainda usar o tipo específico (de Contact) para detalhar com digitação forte, por exemplo, com Employee.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top