2012-05-30 153 views

回答

7

编辑:现在的问题已改为参考扩展方法(这可能是也可能不是OP的意图) - 不,你不能告诉一个类型是否是扩展方法的目标,除非它是一个静态类(在这种情况下,它不能这样使用),除非你知道所有相关的潜在装配。

扩展方法是在静态非通用顶级类型只是一个静态方法,装饰有一个属性。你有效地问这种方法是否存在。你可以迭代你关心的所有程序集中的所有方法,试图找到一个针对该类型的扩展方法,但仅此而已。


原来的答复,当问题没有提到的扩展方法

如果你知道所有在它可能扩展的组件,你可以使用Assembly.GetTypesType.IsSubclassOf检查他们每个人。

如果类是未密封并且不包含内部抽象成员(即,它可以加长),那么就可以不告诉其他一些,卸载组件是否含有一个子类,没有。每个班级“知道”其父母,但不了解其子女。

+0

@Downvoter:关心评论? –

+0

谢谢你双重答案:-)我从两方面了解到。 –

2

如果一个类是受保护的,或公开,几乎没有办法来确定它是否延长或不。

如果要在装配体内或装配过程中(所有装入的装配体)确定,可以使用Type.IsSubclassOfType.IsAssignableForm进行检查。

如果你想确定在编译时(无需实际执行)的解决方案中,只是使构造私有,或将类标记为密封,编译解决方案,并检查所有的相关的错误。完成后,恢复更改。

1

无法知道某个类是否使用扩展方法进行了扩展。将扩展方法看作静态过程,这些静态过程在不同的项目中只会有微弱差别。

扩展方法不产生任何新的类型,也可以永不覆盖真正的成员方法(因此,直到你开始直接打电话给他们,他们不能以任何方式改变对象的行为)。因此,您可能不需要需要来检测它们的存在。

可以确定某个特定方法是扩展方法还是真正的成员方法。也可以使用反射在特定的加载程序集中列出所有扩展方法。这是解释here

相关问题