也算記錄自己的學習篇=侥猬。= 適合入門看 這里簡單介紹下FieldInfo 和他基本的幾個方法
簡介
FieldInfo就是通過反射指定類獲取到的 該類里面字段的屬性并提供對字段元數(shù)據(jù)的訪問權限。
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(靜態(tài)) 必須有一個羡宙,
Console.WriteLine(feldInfo1.Name);
Console.WriteLine(feldInfo2.Name);
Console.ReadKey();
結果:
image.png
image.png
用上了 BindingFlags之后就可以獲取到指定的類型 但是有一點必須的是BindingFlags.Instance(對象) 和 BindingFlags.Static(靜態(tài)) 必須有一個簇抵,
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 | 獲取與此字段關聯(lián)的特性( |
Custom | 獲取包含此成員自定義屬性的集合。 |
DeclaringType | 獲取是誰聲明該模塊成員的類的Type |
FieldType | 獲取這個字段對象的Type |
ReflectedType | 獲取 MemberInfo 的此實例的類對象( |
還有一堆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();
-
結果
image.png
-
-
獲取值 GetValue(Object)
- GetValue(含有這個字段的類的對象)
Field field = new Field(); Console.WriteLine(field.A); field.A += 10; Console.WriteLine(field.GetType().GetField("A").GetValue(field)); Console.ReadKey();
-
結果:
image.png