最近用到反射技术,有些疑问:
[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);
}
1、GetType是通过实例对象获取对象的构建类型的类型对象,而typeof是对指定类型获取类型对象而不需先实例化,这个跟反射没任何关系,只是反射要用到类型对象而已。
2、这些方法是通过类型对象获取定义在这个类型(或其基类)中的方法或属性,这个过程就是一个反射过程。
3、特性是用于定义类型、方法、属性、事件、变量等的使用特征或限定范围,跟反射没必然的关系,但一般对特性的使用都离不开反射。
4、获取类型的方法、属性、事件、变量时需要将获取的结果缓存起来,以提升性能,此外,在获取相应的特性定义的时候,也最好进行特性的缓存。缓存与否在于你对这个反射的结果的重用程度,不重用不应该缓存,重用次数少也没必要缓存。关键在于整体资源开销的一个考量。
你用反射的方式创建了一个对象实例,就把这个实例不要释放掉,下次再用的时候,直接使用就行了,就不需要通过反射来创建了。
这个没性能问题。按心使用