1

同じ文脈で、ここで別の質問がありました。今、私は別のクエリがあります。

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。さて、問題は、より安全なオプションの方が良いのではないかということです。

4

0 に答える 0