Я строю объект репозитория, и у меня есть интерфейс, IIdentifiable<T>
. Таким образом, объекты, идентифицированные Гидами, например, реализуют IIdentifiable<Guid> with public Guid Id { get; }
. Все идет нормально.Резервные общие аргументы?
У меня есть интерфейс IRepository<T, TIdentifier> where T : IIdentifiable<TIdentifier>
.
Мне кажется, что общий аргумент TIdentifier является избыточным, потому что эта уже информация содержится в общем аргументе T. Есть ли способ, которым я могу иметь более чистую реализацию IRepository, где мне нужно указывать T в мой бизнес-код?
Я за чем-то вроде 'IRepository<T> where T : IIdentifiable<T.GenericArgs[0]>
.
Я сомневаюсь, что это возможно, но просто подумал, что я спрошу. Может быть, у нового материала C# 4 есть что-то для этого?
Дело в том, что общее свойство Id скроет не общий код –
Ну, так как это интерфейсы, это не «действительно» скрывается. Предположительно, нестандартная явная реализация просто вызовет общее свойство Id – cordialgerm