C#通过反射获取类型的字段值及给字段赋值的操作,可以通过以下步骤进行:
1. 获取类型对象
获取类型对象可以通过两种方式进行,一种是通过已知对象获取,另一种是通过类型名称字符串获取。以下是两种方式的示例代码:
通过已知对象获取
MyClass obj = new MyClass();
Type type = obj.GetType();
通过类型名称字符串获取
Type type = Type.GetType("MyNamespace.MyClass");
2. 获取字段对象
获取字段对象需要先获得类型对象,然后调用GetType().GetField()
方法。该方法有两个参数,第一个参数是字段名称,对大小写敏感,第二个参数是指定搜索范围。如果不指定搜索范围,则默认搜索当前类型的公共字段。以下是获取字段对象的示例代码:
FieldInfo field = type.GetField("MyField", BindingFlags.Public | BindingFlags.Instance);
3. 获取字段值
获取字段值需要先获取字段对象,然后调用GetValue()
方法。以下是获取字段值的示例代码:
MyClass obj = new MyClass();
Type type = obj.GetType();
FieldInfo field = type.GetField("MyField", BindingFlags.Public | BindingFlags.Instance);
object value = field.GetValue(obj);
4. 给字段赋值
给字段赋值需要先获取字段对象,然后调用SetValue()
方法。以下是给字段赋值的示例代码:
MyClass obj = new MyClass();
Type type = obj.GetType();
FieldInfo field = type.GetField("MyField", BindingFlags.Public | BindingFlags.Instance);
field.SetValue(obj, "New Value");
以下是完整示例代码:
using System;
using System.Reflection;
namespace MyNamespace
{
class MyClass
{
public string MyField = "Initial Value";
}
class Program
{
static void Main(string[] args)
{
MyClass obj = new MyClass();
Type type = obj.GetType();
FieldInfo field = type.GetField("MyField", BindingFlags.Public | BindingFlags.Instance);
// 获取字段值
object value = field.GetValue(obj);
Console.WriteLine("Field Value: {0}", value);
// 给字段赋值
field.SetValue(obj, "New Value");
Console.WriteLine("New Field Value: {0}", field.GetValue(obj));
}
}
}
输出结果为:
Field Value: Initial Value
New Field Value: New Value
以上就是通过反射获取类型的字段值及给字段赋值的操作的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 通过反射获取类型的字段值及给字段赋值的操作 - Python技术站