У меня вопрос по поводу изменения типов параметров в виртуальных методах. Сначала я объясню сценарий.
Это базовый интерфейс для пользователей, которые могут выполнять команды
public interface IUserThatExecutesCommands
{
bool IsInRole(string role);
}
Это расширение базового интерфейса, требующее, чтобы пользователи имели концепцию Eminence
public interface IUserThatExecutesEminenceCommands : IUserThatExecutesCommands
{
int Eminence { get; }
}
Теперь это базовый абстрактный класс UserCommand, который определяет команды, которые IUserThatExecutesCommands
используют
public abstract class UserCommand
{
public virtual bool CanBeExecutedBy(IUserThatExecutesCommands user)
{
// For the purpose of simplification I have not included the actual implementation of this method.
return UserIsInOneOfAllowedRoles(user);
}
}
Вот расширение этого класса, которое вводит понятие возвышения, поэтому требует IUserThatExecutesEminenceCommands
для использования. На данный момент это вызывает ошибку компилятора, потому что я изменил тип использования, который передается.
public abstract class EminenceCommand : UserCommand
{
public override bool CanBeExecutedBy(IUserThatExecutesEminenceCommands user)
{
return user.Eminence >= _requiredEminence;
}
}
Мой вопрос: есть ли способ, которым я могу переопределить функцию CanBeExecutedBy
, чтобы я мог изменить тип передаваемого пользователя? Я хочу иметь возможность расширять класс UserCommand, но в настоящее время я не могу из-за этой проблемы.
Спасибо