找回密码
 注册帐号

扫一扫,访问微社区

开果 c#反射入门篇(Reflection)——FieldInfo 发现类字段

24
回复
676
查看
[ 复制链接 ]

6

主题

10

帖子

99

积分

Rank: 9Rank: 9Rank: 9

UID
327626
好友
1
蛮牛币
64
威望
0
注册时间
2019-7-19
在线时间
71 小时
最后登录
2019-8-20
2019-8-10 17:51:45 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 开果 于 2019-8-10 17:58 编辑

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

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

例子
先定义个类型

[C#] 纯文本查看 复制代码
  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();

蛮牛1.png
可以看出来第二个C是私有的所以会为空


[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();

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

[C#] 纯文本查看 复制代码
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();

结果:
蛮牛3.png

2.常用属性
这里就列几个基础的=。=完全的可以自己 去看c#的API

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

[C#] 纯文本查看 复制代码
  public class Field
        {
         public int A;
         public string B;
        public Action action;
        private int C;
        private string D;
        }

赋值 SetValue(Object, Object)
SetValue(含有这个字段的类的对象,要赋的值)


[C#] 纯文本查看 复制代码
 Action action=()=> { };
 Field field = new Field();
Console.WriteLine(field.action ==null ? "空的" : "不为空" );
 FieldInfo fieldaction = field.GetType().GetField("action");
 fieldaction.SetValue(field,action);
 Console.WriteLine(field.action == null ? "空的" : "不为空");
 Console.ReadKey();

结果
蛮牛4.png
获取值 GetValue(Object)
GetValue(含有这个字段的类的对象)
[C#] 纯文本查看 复制代码
      Field field = new Field();
        Console.WriteLine(field.A);
        field.A += 10;
        Console.WriteLine(field.GetType().GetField("A").GetValue(field));
        Console.ReadKey();

结果:
蛮牛5.png
好了 差不多结束了=。= 不定期更新下篇
u3d萌新QQ群844087555 欢迎进来灌水=。=
回复

使用道具 举报

5熟悉之中
645/1000
排名
5713
昨日变化

11

主题

157

帖子

645

积分

Rank: 5Rank: 5

UID
89846
好友
4
蛮牛币
752
威望
0
注册时间
2015-4-7
在线时间
231 小时
最后登录
2019-8-20
QQ
2019-8-11 15:04:04 显示全部楼层
先收藏了,有时间再看
回复 支持 反对

使用道具 举报

0

主题

3

帖子

6

积分

Rank: 1

UID
320805
好友
0
蛮牛币
3
威望
0
注册时间
2019-4-27
在线时间
3 小时
最后登录
2019-8-18
2019-8-12 00:43:56 显示全部楼层
先收藏了 !!!!
回复

使用道具 举报

7日久生情
2109/5000
排名
4092
昨日变化

0

主题

1386

帖子

2109

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
254705
好友
1
蛮牛币
1909
威望
0
注册时间
2017-11-16
在线时间
361 小时
最后登录
2019-8-20
2019-8-12 08:05:54 显示全部楼层
666666666666666666666666
回复 支持 反对

使用道具 举报

0

主题

1

帖子

2

积分

Rank: 1

UID
325876
好友
0
蛮牛币
18
威望
0
注册时间
2019-6-27
在线时间
1 小时
最后登录
2019-8-12
2019-8-12 09:07:04 显示全部楼层
dudulududu
回复

使用道具 举报

5熟悉之中
720/1000
排名
39862
昨日变化

0

主题

366

帖子

720

积分

Rank: 5Rank: 5

UID
134576
好友
0
蛮牛币
17
威望
0
注册时间
2016-1-13
在线时间
348 小时
最后登录
2019-8-20
2019-8-12 09:09:31 显示全部楼层
666666666666666666
回复 支持 反对

使用道具 举报

5熟悉之中
656/1000
排名
16955
昨日变化

1

主题

250

帖子

656

积分

Rank: 5Rank: 5

UID
213085
好友
5
蛮牛币
500
威望
0
注册时间
2017-3-20
在线时间
365 小时
最后登录
2019-8-20
2019-8-12 09:14:31 显示全部楼层
打卡
回复

使用道具 举报

4四处流浪
305/500
排名
10465
昨日变化

4

主题

97

帖子

305

积分

Rank: 4

UID
256471
好友
0
蛮牛币
348
威望
0
注册时间
2017-11-27
在线时间
102 小时
最后登录
2019-8-20
2019-8-12 09:52:05 显示全部楼层
先收藏了 !!!!
回复

使用道具 举报

排名
9398
昨日变化

13

主题

219

帖子

1048

积分

Rank: 9Rank: 9Rank: 9

UID
21402
好友
16
蛮牛币
50
威望
0
注册时间
2014-4-14
在线时间
535 小时
最后登录
2019-8-20

认证开发者

2019-8-12 10:00:14 显示全部楼层
支持
回复

使用道具 举报

5熟悉之中
759/1000
排名
10706
昨日变化

0

主题

501

帖子

759

积分

Rank: 5Rank: 5

UID
301976
好友
1
蛮牛币
1129
威望
0
注册时间
2018-10-31
在线时间
160 小时
最后登录
2019-8-20
2019-8-12 10:22:54 显示全部楼层
回复

使用道具 举报

排名
28931
昨日变化

0

主题

40

帖子

95

积分

Rank: 2Rank: 2

UID
21931
好友
0
蛮牛币
132
威望
0
注册时间
2014-4-18
在线时间
43 小时
最后登录
2019-8-19
QQ
2019-8-12 22:56:49 显示全部楼层
学习学习
回复

使用道具 举报

7日久生情
2109/5000
排名
4092
昨日变化

0

主题

1386

帖子

2109

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
254705
好友
1
蛮牛币
1909
威望
0
注册时间
2017-11-16
在线时间
361 小时
最后登录
2019-8-20
7 天前 显示全部楼层
66666666666666666666
回复 支持 反对

使用道具 举报

0

主题

15

帖子

24

积分

Rank: 1

UID
320481
好友
0
蛮牛币
31
威望
0
注册时间
2019-4-24
在线时间
9 小时
最后登录
2019-8-20
7 天前 显示全部楼层
66666666
回复

使用道具 举报

0

主题

16

帖子

38

积分

Rank: 1

UID
326775
好友
0
蛮牛币
11
威望
0
注册时间
2019-7-9
在线时间
23 小时
最后登录
2019-8-16
7 天前 显示全部楼层
666666666666
回复

使用道具 举报

6蛮牛粉丝
1135/1500
排名
3186
昨日变化

4

主题

223

帖子

1135

积分

Rank: 6Rank: 6Rank: 6

UID
235098
好友
0
蛮牛币
1704
威望
0
注册时间
2017-7-31
在线时间
442 小时
最后登录
2019-8-20
7 天前 显示全部楼层
如何用反射获取指定类的指定字段并修改呢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则