2009-03-24 5 views
3

Я пытаюсь реализовать класс интерфейса, содержащий список объектов. Как создать общий список, чтобы класс реализации определял тип списка:Общий список в интерфейсе

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() { } 
} 

ответ

11

Вы можете сделать что-то вроде этого:

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

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

Вам просто нужно сделать сам IEntity. Затем используйте параметр type в определении GetAll().

Вот как вы бы изменить код:

public interface IEntity<TListItemType> 
{ 
    // stuff snipped 

    IQueryable<TListItemType> GetAll(); 
} 

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

Save() Добавление, Validate() и т.д. логики к объекту домена (который является то, что a Dealer есть, я думаю) не самая лучшая идея в мире, поскольку она нарушает SRP.

Смежные вопросы