![]() |
1
4
反思是强大的,但也有缺点。一般来说,尝试在没有它的情况下编写代码——但是对于“框架”库来说,它非常有用,因为您对实际对象的了解很少/有限;例如:
有一些特殊反射的性能惩罚,但是如果你打算这样做的话 太多了 (在您的库中,并在一个紧密的循环中)您可以减轻这一点:
当然,任何这样的代码都应该被缓存并重新使用(您不想为每个调用编译+执行;只是第一个——其余的应该只执行)。
或者有一些库抽象了这一点;例如,
HyperPropertyDescriptor
将自定义IL(用于成员访问)包装在熟悉的
所以我的“取”:
|
![]() |
2
1
如果鞋子合适,那就穿上它…如果它解决了手头的问题,并且不会导致通过某种测试(最好是分析器)测量到的过度处理,那么不要担心它。有很多问题很容易通过反思来解决。 关于决定不使用反射,我唯一的指导原则是使用反射来获取通常无法访问的属性(即,其他类中的私有属性)。 |
![]() |
3
1
您的非功能性需求/QoS应该决定是否适合使用反射,正如我的评论、测试、测试(单元、性能测试等)一样。如果你的客户对你的表现满意,我会说去做吧。如果使用得当,它可以并且确实会带来一定的生产率增长。 就我个人而言,我会尽量不使用反省。 |
![]() |
4
1
反射可以为扩展性和灵活性提供真正的好处。在使用反射时,性能会受到影响,但这不应该让您立即感到厌烦,尤其是当反射给您带来更多好处时。尽量少用反射,但不要以为它会伤害到你需要时使用。这篇文章在这方面很好: http://www.west-wind.com/weblog/posts/351.aspx |
![]() |
5
1
我的建议是总是首先尝试找到一个面向对象的解决方案,而不是在第一次机会时求助于反思。通过反射可能更容易完成一些事情,但是代码通常通过OO解决方案变得更有组织性,并且您可以消除反射的开销。 在我作为开发人员的这些年里,我只使用过两次反射…第一种方法是访问某个私有变量,以获取Web请求的上载进度。第二种方法是在从数据阅读器读取数据时动态地创建对象实例,稍后我很高兴用一个通用的解决方案替换它。 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 2 年前 |
![]() |
Gabe Tucker · 无法在golang中分配接口对象指针 3 年前 |
![]() |
jkone27 · F#-在编译时从字符串生成简单的空类型 7 年前 |
![]() |
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 7 年前 |
![]() |
Randall Flagg · 访问propertyinfo中的属性 7 年前 |
![]() |
Kacper · 在反映的全名和成员c后的“*”中,“+”是什么意思# 7 年前 |
![]() |
tobeypeters · 反射铸造 7 年前 |
![]() |
myst02 · 如何在另一个方法之后调用该方法? 7 年前 |