Метод расширения, приводящий первый параметр к подтипу. Это хорошо?

У меня был другой вопрос здесь в том же контексте. Теперь у меня есть другой запрос.

В NBuilder, FizzWare.NBuilder Пространство имен содержит интерфейс ISingleObjectBuilder и класс SingleObjectBuilderExtension который является контейнером методов расширения ISingleObjectBuilder,

Теперь методы расширения имеют общий синтаксис:

public static ISingleObjectBuilder<T> ExMethod<T,[more types...]>(this ISingleObjectBuilder<T> objectBuilder, [more params])
{
    ((IObjectBuilder<T>)objectBuilder).ExMethod([more params]);
    return objectBuilder;
}

Таким образом, вы можете увидеть, хотя методы принимают ISingleObjectBuilder, он ожидает, что параметр будет IObjectBuilder который является подчиненным интерфейсом ISingleObjectBuilder,

Теперь рассмотрим этот сенарио:

  • Я реализовал MySingleObjectBuilder:ISingleObjectBuilder.
  • В моем клиентском коде я использую FizzWare.NBuilder Я могу получить доступ MySingleObjectBuilder.ExMethod()
  • Когда я делаю это, я, очевидно, получаю исключение, потому что MySingleObjectBuilder это не IObjectBuilder,

Конечно, было бы безопаснее, если бы методы расширения были для IObjectBuilder, Теперь вопрос в том, не безопаснее ли вариант?

0 ответов

Другие вопросы по тегам