Тип возврата из универсальных методов - PullRequest
1 голос
/ 08 января 2011

Я снова извиняюсь, но этот вопрос является продолжением моего первого вопроса: рассмотреть этот интерфейс:

 interface IRepository<T,U> where T:class where U:class 
{
    IEnumerable<U> SelectAll();

    bool Insert(T item);

    IEnumerable<T> FindAll(Func<T, bool> exp);
}

и я реализую этот интерфейс:

 public class Repository : IRepository<Customer,Select4ColumnsOfCustomers>
{

    #region IRepository<Customer,Select4ColumnsOfCustomers> Members

    public IEnumerable<Select4ColumnsOfCustomers> SelectAll()
    {
        throw new NotImplementedException();
    }

    public bool Insert(Customer item)
    {
        throw new NotImplementedException();
    }

    public IEnumerable<Customer> FindAll(Func<Customer, bool> exp)
    {
        throw new NotImplementedException();
    }

    #endregion
}

public class Select4ColumnsOfCustomers
{
    public int CustomerID { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string Phone { get; set; }
}

Я хочу вернуть только 4 столбца таблицы Customer в базе данных Northwind. Хорошо, это работает, но если я хочу добавить другой метод, который возвращает другие типы, я должен объявить S, U, M, W, ... в интерфейсе и в реализации этого я должен написать этот код:

public class Repository : IRepository<Customer,RetType1,RetType2,RetType3,....>

это нехорошо. Какая альтернатива для этого. Возможно ли, что написать var для типов возврата? Или заполнитель для типов возврата? спасибо

1 Ответ

3 голосов
/ 08 января 2011

Ваш репозиторий может реализовывать несколько интерфейсов.

public class Repository : IRepository<TResult1, T1>, IRepository<Tresult2, T2>, etc...

Ваш метод SelectAll должен быть общим, как

TResult SelectAll<TResult>();

Однако Анджей прав, рассмотрите возможность использования ORM, чтобыобобщить этот код.Проверьте NHiberante и Entity Framework .

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