Unity基础入门分享c#反射入门

c#反射入门篇(Reflection)——FieldInfo 获

2019-05-28  本文已影响124人  懒_开果

也算记录自己的学习篇=。= 适合入门看 这里简单介绍下FieldInfo 和他常用的几个方法

简介

FieldInfo就是通过反射指定类获取到的 该类里面字段的属性并提供对字段元数据的访问权限。

1.如何获取?

Type.GetField(String) 获取该类的指定的名字String公开的字段 如果私有会为空
Type.GetField(String,BindingFlags) 获取该类的指定的名字String,和指定类型BindingFlags的字段
Type.GetFields() 获取该类的所有公开的字段
Type.GetFields(BindingFlags) 获取该类的所有指定类型BindingFlags的字段

例子

先定义个类型

  public class Field
   {
      public int A;
      public string B;

      private int C;
      private string D;
  }
Type.GetField(String)
         FieldInfo feldInfo1 = typeof(Field).GetField("A");
        FieldInfo feldInfo2 = typeof(Field).GetField("C");/,

        Console.WriteLine(feldInfo1.Name);
        Console.WriteLine(feldInfo2.Name);
        Console.ReadKey();
image.png

可以看出来第二个C是私有的所以会为空

Type.GetField(String,BindingFlags)
         FieldInfo feldInfo1 = typeof(Field).GetField("A");
        FieldInfo feldInfo2 = typeof(Field).GetField("C",BindingFlags.NonPublic|BindingFlags.Instance);//BindingFlags.Instance(对象) 和 BindingFlags.Static(静态) 必须有一个,

        Console.WriteLine(feldInfo1.Name);
        Console.WriteLine(feldInfo2.Name);
        Console.ReadKey();

结果: image.png

用上了 BindingFlags之后就可以获取到指定的类型 但是有一点必须的是BindingFlags.Instance(对象) 和 BindingFlags.Static(静态) 必须有一个,

Type.GetFields()
Type.GetFields(BindingFlags)
       FieldInfo[] feldInfos1 = typeof(Field).GetFields();
        FieldInfo[] feldInfos2 = typeof(Field).GetFields(BindingFlags.NonPublic | BindingFlags.Instance);

        foreach (FieldInfo item in feldInfos1)
        {
            Console.WriteLine("不加BindingFlags:" + item.Name);
        }
        foreach (FieldInfo item in feldInfos2)
        {
            Console.WriteLine("加BindingFlags:" + item.Name);
        }

        Console.ReadKey();

结果:

2.常用属性

这里就列几个常用的=。=完全的可以自己 去看c#的API

属性 作用
Attributes 获取与此字段关联的特性(\color{red}{就是获取字段私有化 公开的,静态那些特性})
Custom 获取包含此成员自定义属性的集合。
DeclaringType 获取是谁声明该模块成员的类的Type
FieldType 获取这个字段对象的Type
ReflectedType 获取 MemberInfo 的此实例的类对象(\color{red}{大概就是获取这个字段的Type})
还有一堆is开头的bool属性 都是字面意思 就是判断是否含有

3.方法 =。=我就写下基础的几个

  public class Field
        {
         public int A;
         public string B;
        public Action action;
        private int C;
        private string D;
        }

好了 差不多结束了=。= 不定期更新下篇

u3d萌新QQ群844087555 欢迎进来灌水=。=

上一篇下一篇

猜你喜欢

热点阅读