同じ文脈で、ここで別の質問がありました。今、私は別のクエリがあります。
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
。さて、問題は、より安全なオプションの方が良いのではないかということです。