Наследование обобщенного интерфейса
Рассмотрим следующий код:
public interface IIdentifiable<TKey>
{
TKey Id { get; set; }
}
public interface ILinkable<TKey>
{
TKey MasterId { get; set; }
void Link(TKey masterId);
}
Я хочу создать интерфейс IEntityLinkable, где в качестве параметра будет использоваться класс, реализующий интерфейс IIdentifiable. Я могу это сделать так
public interface IEntityLinkable<TEntity, TKey> where TEntity : IIdentifiable<TKey>
{
TKey MasterId { get; set; }
TEntity Master { get; set; }
void Link(TEntity entity);
}
Вопрос в следующем: можно ли средствами языка c# (8 версия), не используя второй параметр в интерфейсе IEntityLinkable, использовать параметр из обобщенного интерфейса IIdentifiable? Без рефлексии. Использовать object вместо TKey тоже не хотелось бы.
public interface IEntityLinkable<TEntity> where TEntity : IIdentifiable<TKey> where TKey : class
{
TKey MasterId { get; set; }
TEntity Master { get; set; }
void Link(TEntity entity);
}
Чтобы можно было написать такой код:
public class Product : IIdentifiable<int>
{
public int Id { get; set; }
public string Name { get; set; }
}
public class DictionaryProduct : IEntityLinkable<Product>
{
public int MasterId { get; set; }
public Product Master { get; set; }
public void Link(Product entity)
{
throw new NotImplementedException();
}
}