在VB.NET或C#中,有没有方法可以确定一个类是否已被扩展为extension methods?是否有可能知道一个类是否被扩展方法扩展?
回答
编辑:现在的问题已改为参考扩展方法(这可能是也可能不是OP的意图) - 不,你不能告诉一个类型是否是扩展方法的目标,除非它是一个静态类(在这种情况下,它不能这样使用),除非你知道所有相关的潜在装配。
扩展方法是在静态非通用顶级类型只是一个静态方法,装饰有一个属性。你有效地问这种方法是否存在。你可以迭代你关心的所有程序集中的所有方法,试图找到一个针对该类型的扩展方法,但仅此而已。
原来的答复,当问题没有提到的扩展方法
如果你知道所有在它可能扩展的组件,你可以使用Assembly.GetTypes
和Type.IsSubclassOf
检查他们每个人。
如果类是未密封并且不包含内部抽象成员(即,它可以加长),那么就可以不告诉其他一些,卸载组件是否含有一个子类,没有。每个班级“知道”其父母,但不了解其子女。
@Downvoter:关心评论? –
谢谢你双重答案:-)我从两方面了解到。 –
如果一个类是受保护的,或公开,几乎没有办法来确定它是否延长或不。
如果要在装配体内或装配过程中(所有装入的装配体)确定,可以使用Type.IsSubclassOf
或Type.IsAssignableForm
进行检查。
如果你想确定在编译时(无需实际执行)的解决方案中,只是使构造私有,或将类标记为密封,编译解决方案,并检查所有的相关的错误。完成后,恢复更改。
无法知道某个类是否使用扩展方法进行了扩展。将扩展方法看作静态过程,这些静态过程在不同的项目中只会有微弱差别。
扩展方法不产生任何新的类型,也可以永不覆盖真正的成员方法(因此,直到你开始直接打电话给他们,他们不能以任何方式改变对象的行为)。因此,您可能不需要需要来检测它们的存在。
可以确定某个特定方法是扩展方法还是真正的成员方法。也可以使用反射在特定的加载程序集中列出所有扩展方法。这是解释here。
- 1. 是否有可能扩展一个库类扩展MY_Controller类
- 2. 是否可以使用扩展方法扩展泛型类?
- 3. 是否可以扩展类
- 4. 是否有可能巢内的另一个扩展方法?
- 5. 是否有可能在本地扩展chrome扩展中的css?
- 6. 是否有可能重写这个棘手的扩展方法?
- 7. 是否有可能扩展超过一个抽象类?
- 8. 如何知道某个类是否扩展了JWindow类?
- 9. 这个扩展方法是否安全?
- 10. 是否可以扩展DefaultValueAccessor?
- 11. 是否可以扩展DataColumn.Expression
- 12. 是否可以从扩展
- 13. silverlight是否可扩展?
- 14. 是否有可能在PHP扩展中有多个类?
- 15. 是否有可能评估类接口是否扩展某个基类?
- 16. 是否有可能为F#元组创建扩展方法
- 17. 是否有可能将数据绑定到扩展方法?
- 18. “扩展”是否也扩展变量?
- 19. 是否可以扩展私人功能?
- 20. 可能检查一个类是否在PHP中扩展?
- 21. 编译器如何知道是否要扩展零或一个?
- 22. Laravel 4 - 是否可以扩展DB类?
- 23. 是否可以“扩展”财产“类”?
- 24. 如果一个类扩展了另一个类,扩展类可以被初始化而不是扩展它吗?
- 25. 类扩展的语法是否更改?
- 26. 类别方法是否可以扩展到子类?
- 27. 扩展方法是否太贵?
- 28. LESS是否具有“扩展”功能?
- 29. 是否可以有一个类扩展号码?
- 30. 是否有一个简单的可扩展的ASP.NET数据类?
http://stackoverflow.com/questions/299515/c-sharp-reflection-to-identify-extension-methods –
在编辑时或运行时? – Jamiec
你是指扩展方法还是继承?无论哪种方式,这两种替代方案实际上已被回答lol –