Метод расширения, приводящий первый параметр к подтипу. Это хорошо?
У меня был другой вопрос здесь в том же контексте. Теперь у меня есть другой запрос.
В 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
, Теперь вопрос в том, не безопаснее ли вариант?