![]() |
1
4
第一种情况几乎总是更快。然而,它的性能来自这样一个事实,即它可以在编译期间提前绑定,但这也是它最大的缺点:例如,这种方法不能处理动态加载的程序集,而且它更容易出错,因为它是必需的而不是声明性的。(例如,忘记新执行的操作是一件很快就会发生的事情。) 我通常的方法是在发现期间使用反射来实现这种模式,但在调用时使用委托。这使得反射方法的灵活性与性能非常接近于早期绑定方法。
|
![]() |
2
3
使用代理怎么样?你可以用这样的方法:
以后
我想如果你有很多情况的话,这样做会更好,因为字典有散列查找。 如果用户可以提供另一个函数名,则使用的反射类型可以创建安全问题。 |
![]() |
3
2
性能不应该成为您的关注点,除非您分析它并且它是一个瓶颈。更重要的是,IMO,在反射版本中会丢失静态类型安全性和分析。在编译时无法检查这些操作方法
此外,操作的数量对于反射版本的性能是完全不相关的。
|
![]() |
4
2
您可以修复@user287107的答案:
这实际上是在执行@lucero答案的发现阶段,如果名称不总是匹配,这可能很有用。 如果可能的话,在枚举中定义一组操作也是很好的——这将稍微快一点,因为您不需要散列字符串。它还可以让您编写一个单元测试,以确保没有遗漏任何潜在的值。 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
![]() |
Gabe Tucker · 无法在golang中分配接口对象指针 2 年前 |
![]() |
jkone27 · F#-在编译时从字符串生成简单的空类型 6 年前 |
![]() |
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 6 年前 |
![]() |
Randall Flagg · 访问propertyinfo中的属性 6 年前 |
![]() |
Kacper · 在反映的全名和成员c后的“*”中,“+”是什么意思# 6 年前 |
![]() |
tobeypeters · 反射铸造 6 年前 |
![]() |
myst02 · 如何在另一个方法之后调用该方法? 6 年前 |