Domanda

Ho un modulo di ricerca che esegue le query che ritornano gli elenchi di oggetti che sono sotto-classi di A Contatti classe.

Quando gli elenchi vengono utilizzati in GridViews, le proprietà che esistono solo nelle sotto-classi (come hiretete ) non vengono visualizzate perché l'elenco contiene oggetti della classe base ( Contatto ).

C'è un modo per fare getcontacts nella sottomarità di classe restituisce un elenco di dipendente anziché un elenco di contact ?O un modo per "lanciare" la lista di contatta in un elenco di dipendente ?

Grazie in anticipo!

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

È stato utile?

Soluzione

Sì, i generici possono aiutare qui:

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

In alternativa, è possibile utilizzare metodo LINQ Type per ottenere tuttoContatti di un tipo desiderato dalla tua collezione:

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

Altri suggerimenti

Puoi usare i generici, qualcosa del genere:

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

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

Consente di limitare ContactManager per funzionare con specifico tipo di base specifico (I.E Contact) e utilizzare ulteriormente il tipo specifico (di Contact) per eseguire il drill down con una forte digitazione, ad esempio, con Employee.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top