首页 新闻 会员 周边 捐助

C# object.GetType()调用反射吗?

0
悬赏园豆:20 [已解决问题] 解决于 2014-09-05 12:27

最近用到反射技术,有些疑问:

  1. 类的GetType调用反射吗?typeof呢?
  2. 方法type.GetMethods,type.GetProperties等,这些方法调用时会不会再次反射?
  3. 如何知道一个方法用到了反射,有什么特性吗?我用.Net Refleactor看了一下源代码,都有特性声明

    [MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical, __DynamicallyInvokable]
    public extern Type GetType();

    [__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
    public PropertyInfo[] GetProperties()
    {
    return this.GetProperties(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance);
    }

  4. 如果缓存反射,在哪一步做缓存?
木龙哥的主页 木龙哥 | 初学一级 | 园豆:144
提问于:2014-08-31 10:55
< >
分享
最佳答案
0

1、GetType是通过实例对象获取对象的构建类型的类型对象,而typeof是对指定类型获取类型对象而不需先实例化,这个跟反射没任何关系,只是反射要用到类型对象而已。

2、这些方法是通过类型对象获取定义在这个类型(或其基类)中的方法或属性,这个过程就是一个反射过程。

 

3、特性是用于定义类型、方法、属性、事件、变量等的使用特征或限定范围,跟反射没必然的关系,但一般对特性的使用都离不开反射。

 

4、获取类型的方法、属性、事件、变量时需要将获取的结果缓存起来,以提升性能,此外,在获取相应的特性定义的时候,也最好进行特性的缓存。缓存与否在于你对这个反射的结果的重用程度,不重用不应该缓存,重用次数少也没必要缓存。关键在于整体资源开销的一个考量。

收获园豆:20
519740105 | 大侠五级 |园豆:5810 | 2014-08-31 11:22
其他回答(2)
0

你用反射的方式创建了一个对象实例,就把这个实例不要释放掉,下次再用的时候,直接使用就行了,就不需要通过反射来创建了。

Firen | 园豆:5385 (大侠五级) | 2014-08-31 11:49
0

这个没性能问题。按心使用

56180825 | 园豆:1749 (小虾三级) | 2014-08-31 16:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册