扩展方法将第一个参数转换为子类型。这个好吗?

时间:2012-08-07 03:43:02

标签: c# casting extension-methods nbuilder

我在同一个上下文中有另一个问题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的子接口。

现在考虑一下这句话:

  • 我实现了MySingleObjectBuilder:ISingleObjectBuilder。
  • 在我的客户端代码中,我使用FizzWare.NBuilder我可以访问MySingleObjectBuilder.ExMethod()
  • 当我这样做时,我显然会遇到异常,因为MySingleObjectBuilder不是IObjectBuilder

当然,如果扩展方法适用于IObjectBuilder,那么会更安全。 现在的问题是,是不是更安全的选择呢?

0 个答案:

没有答案