C# 反射之属性操作

一、反射-类操作

复制代码
//1.获取对象所有的属性名
Student stu = new Student();
//获取当前类名称
Console.WriteLine(stu.GetType().Name);
//命名空间 和名称
Console.WriteLine(stu.GetType().FullName);
//2.指定类型,动态创建对象
Student stu2 = Activator.CreateInstance<Student>();
Console.WriteLine(stu2.ToJsonString());
复制代码

二、反射属性操作之PropertyInfo

使用PropertyInfo操作属性,简单方便

复制代码
//反射属性操作 方式二
Student stu = new Student();
Type t = stu.GetType();
/*****操作所有属性*****/
//1.获取指定名称的属性
PropertyInfo[] pro2 = t.GetProperties();
foreach (PropertyInfo item in pro2)
{
    //Name----属性名称
    //PropertyType----字段类型 例如:System.Int32
    Console.WriteLine(item.Name + "--->" + item.MemberType + "--->" + item.PropertyType);
}

//2.获取或设置属性的值
foreach (PropertyInfo item in pro2)
{
    object value = null;
    if (item.Name == "ID")
        value = 1;
    else
        value = "张三";
    item.SetValue(stu, value);
    //获取属性值
    Console.WriteLine(item.GetValue(stu));
}
/**操作单个属性***/
PropertyInfo id = t.GetProperty("ID");
id.SetValue(stu,2);
Console.WriteLine(id.GetValue(stu));
复制代码

三、反射属性操作之MemberInfo

MemberInfo可以操作所有的类成员

复制代码
Student stu = new Student();
//反射属性操作 方式一
Type t = stu.GetType();
//GetMembers() 返回当前 System.Type 的所有公共成员
//获取对象的所有公共属性名称和属性值
MemberInfo[] members = t.GetMembers(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
foreach (MemberInfo item in members)
{
    if (item.MemberType != MemberTypes.Property)
    {
        Console.WriteLine("当前属性为:" + item.MemberType);
        continue;
    }
    Console.WriteLine(item.Name); //属性名称
    Console.WriteLine(item.MemberType);//属性类型
                                        //获取属性的值
    object value = null;
    if (item.Name == "ID")
        value = 1;
    else value = "张三";
    t.InvokeMember(item.Name, BindingFlags.SetProperty, null, stu, new object[] { value });
    //设置属性的值
    object result = t.InvokeMember(item.Name, BindingFlags.GetProperty, null, stu, null);
    Console.WriteLine(result);
}
复制代码

 

更多参考:

http://blog.163.com/m13864039250_1/blog/static/213865248201372833416948/

http://blog.163.com/m13864039250_1/blog/static/213865248201372123134158/

posted @   天马3798  阅读(3041)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2014-12-03 <modules>
点击右上角即可分享
微信分享提示