同じ文脈で、ここで別の質問がありました。今、私は別のクエリがあります。
NBuilderでは、名前空間には、の拡張メソッドのコンテナであるFizzWare.NBuilderインターフェイスISingleObjectBuilderとクラスが含まれています。SingleObjectBuilderExtensionISingleObjectBuilder
現在、拡張メソッドには一般的な構文があります。
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。さて、問題は、より安全なオプションの方が良いのではないかということです。