在同样的情况下,我在这里有另一个问题。现在我有另一个查询。
在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
。现在的问题是,不是更安全的选择也更好吗?