我在同一个上下文中有另一个问题here。现在我有另一个问题。
在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
的子接口。
现在考虑一下这句话:
FizzWare.NBuilder
我可以访问MySingleObjectBuilder.ExMethod()
MySingleObjectBuilder
不是IObjectBuilder
。当然,如果扩展方法适用于IObjectBuilder
,那么会更安全。
现在的问题是,是不是更安全的选择呢?