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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM