2009-03-24 8 views
3

J'essaie d'implémenter une classe d'interface, qui contient une liste d'objets. Comment puis-je rendre la liste générique, de sorte que la classe d'implémentation définisse le type de liste:Liste générique dans une interface

public interface IEntity 
{ 
    Guid EntityID { get; set; } 
    Guid ParentEntityID{ get; set; } 
    Guid RoleId { get; set; } 

    void SetFromEntity(); 
    void Save(); 
    bool Validate(); 
    IQueryable<T> GetAll(); // That is what I would like to do 
    List<Guid> Search(string searchQuery); 
} 
public class Dealer : IEntity 
{ 
    public IQueryable<Dealer> GetAll() { } 
} 

Répondre

11

Vous pouvez faire quelque chose comme ceci:

public interface IEntity<T> 
{ 
    IQueryable<T> GetAll(); 
} 

public class Dealer : IEntity<Dealer> 
{ 
    public IQueryable<Dealer> GetAll() { } 
} 
3

Vous avez juste besoin de rendre IEntity générique lui-même. Ensuite, utilisez le paramètre type dans la définition de GetAll().

Voilà comment vous changeriez votre code:

public interface IEntity<TListItemType> 
{ 
    // stuff snipped 

    IQueryable<TListItemType> GetAll(); 
} 

public class Dealer : IEntity<Dealer> 
{ 
    public IQueryable<Dealer> GetAll() { // some impl here } 
} 
1

Ajout Save(), Validate(), etc. logique à votre objet de domaine (qui est ce que un Dealer est, je suppose) n'est pas la meilleure idée dans le monde car il viole SRP.

Questions connexes