Joa*_*nge 1 .net c# reflection
我看到签名是:
public virtual void SetValue(object obj, object value, object[] index)
Run Code Online (Sandbox Code Playgroud)
这种方法不会导致参数被装箱和取消装箱吗?
为什么这种方法不是通用的?然后它甚至可以由编译器推断,在运行时没有装箱/拆箱惩罚.
这部分是由于PropertyInfo.SetValue早于泛型这一事实 - 反射从一开始就是.NET的一部分.
然而,在这种特定情况下,以任何方式使用泛型都是困难的.正如您所建议的那样,编译器无法推断出此信息,因为属性信息是在运行时收集的,而不是在编译时收集的.这就是反思背后的目的.
CLR团队确保所有对象(包括值类型)都可以工作,而不是尝试将其用于通用方法(可能必须导致非泛型实现,无论如何,由于运行时行为)一个System.Object.是的,这会导致拳击,但是由于反射的开销,拳击值类型的额外开销并不是真的令人担忧.
| 归档时间: |
|
| 查看次数: |
1092 次 |
| 最近记录: |