Использование where в объявлении интерфейса - PullRequest
0 голосов
/ 07 апреля 2011

У меня есть следующий объект домена:

public class Bank : IEntity
{
}

И следующий IRepository:

public interface IRepository<TEntity> where TEntity : IEntity
{
}

Нужен ли where TEntity : IEntity?Что это означает, что TEntity имеет тип IEntity?Существуют ли соглашения об именах, когда я использую что-то вроде TEntity?Что означает Т?

Ответы [ 4 ]

2 голосов
/ 07 апреля 2011

Вы можете прочитать об общих ограничениях и их использовании в Зачем использовать общие ограничения? , и вы можете проверить Документы MSDN для более официального охвата.

Что касается «T», то это строго соглашение, которое восходит к C ++, когда такие вещи назывались « templates ». (Это соглашение, которому вы должны следовать, однако.)

2 голосов
/ 07 апреля 2011

Ваш IRepository является универсальным классом, а TEntity является параметром универсального типа.Это как заполнитель для фактического типа.

TEntity: IEntity означает, что вам потребуется, чтобы фактический используемый тип реализовывал IEntity, а в вашей реальной реализации репозитория вы можете ссылаться на методы и свойства, предоставляемые интерфейсом IEntity.

Нужно это или нет, зависит от предполагаемого использования хранилища.Обычно ограничения типов используются для обеспечения определенных свойств используемых типов, от которых зависит реализация универсального типа.

1 голос
/ 07 апреля 2011

Это зависит от ваших потребностей во времени проектирования.

Вы можете заменить общее TEntity использование на IEntity. Но тогда вы будете ограничены только членами IEntity.

Вам нужно будет разыграть IEntity членов, чтобы получить доступ к дочерним элементам типа.

1 голос
/ 07 апреля 2011

where TEntity : IEntity означает, что тип TEntity должен реализовывать интерфейс IEntity. Другими словами, в вашем универсальном интерфейсе IRepository вы можете использовать типы, которые реализуют IEntity интерфейс.

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