У меня был немного более сложный случай, когда я хотел, чтобы базовый класс явно реализовывал неуниверсальный интерфейс, а производный класс реализовывал универсальный интерфейс.
Интерфейсы:
public interface IIdentifiable<TKey> : IIdentifiable
{
TKey Id { get; }
}
public interface IIdentifiable
{
object Id { get; }
}
Я решил это, объявив абстрактный метод получения в базовом классе и позволив явной реализации вызвать его:
public abstract class ModelBase : IIdentifiable
{
object IIdentifiable.Id
{
get { return GetId(); }
}
protected abstract object GetId();
}
public class Product : ModelBase, IIdentifiable<int>
{
public int ProductID { get; set; }
public int Id
{
get { return ProductID; }
}
protected override object GetId()
{
return Id;
}
}
Обратите внимание, что базовый класс не имеет типизированной версии Id
, которую он может вызвать.