Общий список в интерфейсе - PullRequest
3 голосов
/ 24 марта 2009

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

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

Ответы [ 4 ]

11 голосов
/ 24 марта 2009

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

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

public class Dealer : IEntity<Dealer>
{
   public IQueryable<Dealer> GetAll() { }
}
3 голосов
/ 24 марта 2009

Вам просто нужно сделать 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 голос
/ 24 марта 2009

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

0 голосов
/ 24 марта 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...