1

在同样的情况下,我在这里有另一个问题。现在我有另一个查询。

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;
}

所以你可以看到,虽然方法 accept ISingleObjectBuilder,但它期望参数是 anIObjectBuilder的子接口ISingleObjectBuilder

现在考虑这个情景:

  • 我已经实现了 MySingleObjectBuilder:ISingleObjectBuilder。
  • 在我使用的客户端代码中,FizzWare.NBuilder我可以访问MySingleObjectBuilder.ExMethod()
  • 当我这样做时,我显然得到了一个例外,因为MySingleObjectBuilder不是IObjectBuilder.

当然,如果扩展方法是 for 会更安全IObjectBuilder。现在的问题是,不是更安全的选择也更好吗?

4

0 回答 0