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/

时间: 2024-08-04 15:58:07

C# 反射之属性操作的相关文章

C# 反射获取属性值、名称、类型以及集合的属性值、类型名称

实体类 class Product { public string Id { get; set; } public string Name { get; set; } public List<ProductDetail> Detail { get; set; } public List<ProductComment> Comment { get; set; } } class ProductDetail { public string DtlId { get; set; } pub

反射与类操作

取得父类信息 利用反射可以做出一个对象所具备的所有操作行为,而且最关键的是这一切的操作都可以基于Object类型进行, 在java里面任何的程序类都一定会有一个父类,那么在Class类里面就可以通过此方式来取得父类或者是实现的父接口,有如下的两个方法提供: 取得类的包名称:public Package getPackage() 取得父类的Class对象:public Class<? super T> getSuperclass() 取得父接口对象:public Class<?>[]

Day49:CSS属性操作(文本、背景、边框、列表、display、边距)

一.CSS属性操作 1.CSS text 文本颜色:color 颜色属性被用来设置文字的颜色. 颜色是通过CSS最经常的指定: 十六进制值 - 如: #FF0000 一个RGB值 - 如: RGB(255,0,0) 颜色的名称 - 如:  red p { color: rebeccapurple; } 水平对齐方式 text-align 属性规定元素中的文本的水平对齐方式. left       把文本排列到左边.默认值:由浏览器决定. right     把文本排列到右边. center 把文

js的HTML属性操作

<input type="button" id="btn1" value="按钮" /> HTML属性操作:读.写 属性名 属性值 属性都操作:获取.找到 元素.属性 <head> <meta charset="UTF-8"> <title>Title</title> <script> window.onload=function () { var oBt

JS的属性操作(2)

1.点击下拉框选择信息 2.点击按钮,下拉框内选择的信息会自动跳转到文本输入框 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>无标题文档</title> 6 7 <script> 8 /* 9 HTML

JavaScript 属性操作

1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>无标题文档</title> 6 7 <script> 8 /* 9 HTML 的属性操作:读.写 10 属性名: 11 属性值: 12 13 读操作:获取.

java 反射 根据属性 动态设置值

package com.jhl.jvm.lesson8; import java.lang.reflect.Field; /** * * @author jhl * java 反射 根据属性 动态设置值 demo * */ public class ExceptionLog { private String exceptionLogId; private String processingType; private String type; private String content; pub

09.11 jquery04 效果 基本 滑动滑出 淡入淡出 自定义动画 动画操作 工具 浏览器 对象和属性操作核心

# 效果 ### 基本 (width/height/opacity) * show() * hide() * toggle() ### 滑动滑出 (height) * slideUp()       隐藏 * slideDown()  显示 * slideToggle() ### 淡入淡出 * fadeOut()    隐藏 * fadeIn()      显示 * fadeToggle() * fadeTo() 不占用位置 消失之后后面的自动向上移动 ### 自定义动画 * animate(p

avalon2学习教程05属性操作

avalon2与avalon1的属性操作虽然都是使用ms-attr,但用法完全不一样. avalon1是这样操作属性的 其语法为 ms-attr-valueName="vmProp" 有多少个属性就写多个ms-attr-.其中不能省略.此外,还存在ms-title, ms-alt,ms-src, ms-href, ms-selected, ms-checked等等缩略写法.但估计很少人知道,到底哪些属性可以缩写,哪些不能. avalon2从减轻用户的记忆出发,将你要操作的属性全部打包成