Скрыть аргументы универсального типа за результатами конкретного типа в CS0535C#

Место общения программистов C#
Гость
Скрыть аргументы универсального типа за результатами конкретного типа в CS0535

Сообщение Гость »

У меня довольно академический вопрос: почему технически невозможно использовать следующий код?

Код: Выделить всё

// abstractions
public record MappingRequest(TContract Contract, TEntity Entity);

public interface IMapper
{
TResult Map(MappingRequest request);
}

// more readable abstraction
public interface ILocationMapper : IMapper
{
}

// concrete
public record LocationResult;
public record LocationContract;
public record LocationEntity;

public record LocationRequest(LocationContract Contract, LocationEntity Entity) : MappingRequest(Contract, Entity);

public class LocationMapper : ILocationMapper
{
public LocationResult Map(LocationRequest request)
{
return new LocationResult();
}
}
Это выдает следующую ошибку компилятора:

Код: Выделить всё

Error CS0535 : 'LocationMapper' does not implement interface member 'IMapper.Map(MappingRequest)'
Почему компилятор не может «сделать вывод» (не совсем уверен, правильный ли здесь термин), что LocationRequest наследуется от MappingRequest?
Спасибо за объяснение 🙏🏻

Источник: https://stackoverflow.com/questions/781 ... -in-cs0535

Вернуться в «C#»