也算记录自己的学习篇=。= 适合入门看 这里简单介绍下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();
可以看出来第二个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();
####结果:
用上了 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 的此实例的类对象( 大 概 就 是 获 取 这 个 字 段 的 T y p e \color{red}{大概就是获取这个字段的Type} 大概就是获取这个字段的Type) |
还有一堆is开头的bool属性 | 都是字面意思 就是判断是否含有 |
##3.方法 =。=我就写下基础的几个
public class Field
{
public int A;
public string B;
public Action action;
private int C;
private string D;
}
-
###赋值 SetValue(Object, Object)
-
SetValue(含有这个字段的类的对象,要赋的值)
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();
-
######结果
-
-
###获取值 GetValue(Object)
- GetValue(含有这个字段的类的对象)
Field field = new Field(); Console.WriteLine(field.A); field.A += 10; Console.WriteLine(field.GetType().GetField("A").GetValue(field)); Console.ReadKey();
- ######结果:
####好了 差不多结束了=。= 不定期更新下篇
##u3d萌新QQ群844087555 欢迎进来灌水=。=