Страницы

Поиск по вопросам

вторник, 26 марта 2019 г.

Правильное использование ограничений в обобщённых типах

Есть интерфейс IRepository:
public interface IRepository where T : BaseModel {...}
где BaseModel- базовый класс для моделей. Есть провайдер к базе данных, который реализует этот интерфейс:
public class Provider : IRepository where T : BaseModel {...}
Есть ли необходимость указывать ограничение на T в случае провайдера, если оно уже указано на уровне интерфейса?


Ответ

Ну очень странный вопрос. Да нужно, потому что без него не компилируется:
http://ideone.com/zfhSDo
public class Provider : IRepository /* where T : BaseModel */ {}
prog.cs(6,14): error CS0314: The type `T' cannot be used as type parameter `T' in the generic type or method `IRepository'. There is no boxing or type parameter conversion from `T' to `BaseModel' prog.cs(5,30): (Location of the symbol related to previous error)
http://ideone.com/I26aUP
public class Provider : IRepository where T : BaseModel {}
А тут всё хорошо.

Комментариев нет:

Отправить комментарий