C#中如何用反射获取类的对象实例属性^^^^^^^^^^^^^^^^^^^^^

时间:2022-02-16 06:57:04
示例如下

三个类 

类A
public class A { private string _a;
public string A
{get;set;}
}
类B
public class B {private string _b;
public string B
{get;set;}
}
类A_B
public claa A_B{
private A obj_A;
public A Obj_A{get;set;}

private List<B> obj_B;
public List<B> Obj_B{get;set;}
}

现在我想通过反射获取 A_B 类中的属性对象,  属性的类性,属性对象名   不知道如何得到
class program
{
   public static void Main()
  {
        
            //1使用Type类提供的静态方法GetType()得到类对象
            Type objType = Type.GetType("命名空间.A_B");

             
             ................这里不知道如何写,请教C#反射高手(我想得到 obj_A 对象的类型 obj_B对象类型)
            

                         
   }
}

23 个解决方案

#1


顶个!!

#2


PropertyInfo[] pinfo = objType.GetProperties();

#3



            命名空间.A_B obj = new 命名空间.A_B();
            Type objType = Type.GetType("命名空间.A_B");
            PropertyInfo propertyInfo = objType.GetProperty("PropertyName", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);

            object propertyValue = propertyInfo.GetValue(obj, null);

#4


上面的几位,你们这种方法我是得不到的

#5


PropertyInfo[] peroperties = typeof(A).GetProperties(BindingFlags.Public | BindingFlags.Instance);

        foreach (PropertyInfo property in peroperties)
        {
            object[] objs = property.GetCustomAttributes(typeof(DescriptionAttribute), true);
        }

#6


引用 4 楼 cefriend 的回复:
上面的几位,你们这种方法我是得不到的


怎么会得不到?????
把类和属性的代码贴出来。。。

#7


up up ~

#8



            Type objType = Type.GetType("ConsoleApplication1.A_B");
            PropertyInfo[] pi = objType.GetProperties();
            Console.WriteLine(pi[0].PropertyType);


结贴吧。

#9


引用 8 楼 healer_kx 的回复:
C# code

            Type objType = Type.GetType("ConsoleApplication1.A_B");
            PropertyInfo[] pi = objType.GetProperties();
            Console.WriteLine(pi[0].PropertyType);



结贴吧。……


给分呵呵

#10


PropertyInfo类有MemberType, Name(属性对象名), PropertyType(属性的类性)等等属性,不知道楼主要的是什么信息? 

#11


引用 4 楼 cefriend 的回复:
上面的几位,你们这种方法我是得不到的

你引用了没

#12


没有得到,你们都没测试

#13


using System.Reflection;

#14


学习了

#15


扯淡,这个就是从生产环境的代码中拷过来的。什么叫没测试

#16


................这里不知道如何写,请教C#反射高手(我想得到 obj_A 对象的类型 obj_B对象类型)
  上面的那位,那我问题我如何得到 obj_B 的对象类型 B  你们的那个方法得到的是 list 对象


自已跟个B一样

#17


靠,数组对象还不知道怎么用。。。不想多说了。走人

#18


引用 5 楼 wuyq11 的回复:
PropertyInfo[] peroperties = typeof(A).GetProperties(BindingFlags.Public | BindingFlags.Instance);

  foreach (PropertyInfo property in peroperties)
  {
  object[] objs = property.GetCustomAttribu……



这位楼主你的回答我没看明白,

#19


我们以obj_A来说明吧
首先获取obj_A
PropertyInfo prop = this.GetType().GetProperty("obj");
在获取你想要的泛型类型
string name = prop.PropertyType.GetGenericArguments()[0].FullName;
//相信这应该是你想要的结果吧

#20


 火药味好重。。。

#21


引用 18 楼 cefriend 的回复:
引用 5 楼 wuyq11 的回复:
PropertyInfo[] peroperties = typeof(A).GetProperties(BindingFlags.Public | BindingFlags.Instance);

foreach (PropertyInfo property in peroperties)
{
object[] objs = property.G……


如果你连这个都有点看不懂,劝你还是放弃学编程吧,找点不用懂脑子的行业,其实也很好。

#22


楼上说的都对,不过说的都是屁话,既然要反射那这个反射类就应该是工厂类,这个类不会知道转换成什么类,直接返回object对象,所以用PropertyInfo屁都得不得,楼主还是使用这个
Object obj = new Object();
            obj = Activator.CreateInstanceFrom("models.dll", "models.M3").Unwrap();
            MemberInfo[] members = obj.GetType().GetMembers();
            string s = "sss";
            for(int i=0;i<members.Length;i++)
            {
               MessageBox.Show( members[i].Name+"  "+members[i].ToString());//显示出属性名和属性数据类型
               members[i].MemberType.ToString().Equals("Field");//可以判断出这个属性是不是自己添加的属性
            }
            //设置对象中某个属性的值"title"就是model属性你可以迭代赋值,可以通过上面的方法获取属性名动态赋值
            obj.GetType().InvokeMember("title", BindingFlags.SetField, null, obj, new Object[] { s });

#23


学习~!

#1


顶个!!

#2


PropertyInfo[] pinfo = objType.GetProperties();

#3



            命名空间.A_B obj = new 命名空间.A_B();
            Type objType = Type.GetType("命名空间.A_B");
            PropertyInfo propertyInfo = objType.GetProperty("PropertyName", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);

            object propertyValue = propertyInfo.GetValue(obj, null);

#4


上面的几位,你们这种方法我是得不到的

#5


PropertyInfo[] peroperties = typeof(A).GetProperties(BindingFlags.Public | BindingFlags.Instance);

        foreach (PropertyInfo property in peroperties)
        {
            object[] objs = property.GetCustomAttributes(typeof(DescriptionAttribute), true);
        }

#6


引用 4 楼 cefriend 的回复:
上面的几位,你们这种方法我是得不到的


怎么会得不到?????
把类和属性的代码贴出来。。。

#7


up up ~

#8



            Type objType = Type.GetType("ConsoleApplication1.A_B");
            PropertyInfo[] pi = objType.GetProperties();
            Console.WriteLine(pi[0].PropertyType);


结贴吧。

#9


引用 8 楼 healer_kx 的回复:
C# code

            Type objType = Type.GetType("ConsoleApplication1.A_B");
            PropertyInfo[] pi = objType.GetProperties();
            Console.WriteLine(pi[0].PropertyType);



结贴吧。……


给分呵呵

#10


PropertyInfo类有MemberType, Name(属性对象名), PropertyType(属性的类性)等等属性,不知道楼主要的是什么信息? 

#11


引用 4 楼 cefriend 的回复:
上面的几位,你们这种方法我是得不到的

你引用了没

#12


没有得到,你们都没测试

#13


using System.Reflection;

#14


学习了

#15


扯淡,这个就是从生产环境的代码中拷过来的。什么叫没测试

#16


................这里不知道如何写,请教C#反射高手(我想得到 obj_A 对象的类型 obj_B对象类型)
  上面的那位,那我问题我如何得到 obj_B 的对象类型 B  你们的那个方法得到的是 list 对象


自已跟个B一样

#17


靠,数组对象还不知道怎么用。。。不想多说了。走人

#18


引用 5 楼 wuyq11 的回复:
PropertyInfo[] peroperties = typeof(A).GetProperties(BindingFlags.Public | BindingFlags.Instance);

  foreach (PropertyInfo property in peroperties)
  {
  object[] objs = property.GetCustomAttribu……



这位楼主你的回答我没看明白,

#19


我们以obj_A来说明吧
首先获取obj_A
PropertyInfo prop = this.GetType().GetProperty("obj");
在获取你想要的泛型类型
string name = prop.PropertyType.GetGenericArguments()[0].FullName;
//相信这应该是你想要的结果吧

#20


 火药味好重。。。

#21


引用 18 楼 cefriend 的回复:
引用 5 楼 wuyq11 的回复:
PropertyInfo[] peroperties = typeof(A).GetProperties(BindingFlags.Public | BindingFlags.Instance);

foreach (PropertyInfo property in peroperties)
{
object[] objs = property.G……


如果你连这个都有点看不懂,劝你还是放弃学编程吧,找点不用懂脑子的行业,其实也很好。

#22


楼上说的都对,不过说的都是屁话,既然要反射那这个反射类就应该是工厂类,这个类不会知道转换成什么类,直接返回object对象,所以用PropertyInfo屁都得不得,楼主还是使用这个
Object obj = new Object();
            obj = Activator.CreateInstanceFrom("models.dll", "models.M3").Unwrap();
            MemberInfo[] members = obj.GetType().GetMembers();
            string s = "sss";
            for(int i=0;i<members.Length;i++)
            {
               MessageBox.Show( members[i].Name+"  "+members[i].ToString());//显示出属性名和属性数据类型
               members[i].MemberType.ToString().Equals("Field");//可以判断出这个属性是不是自己添加的属性
            }
            //设置对象中某个属性的值"title"就是model属性你可以迭代赋值,可以通过上面的方法获取属性名动态赋值
            obj.GetType().InvokeMember("title", BindingFlags.SetField, null, obj, new Object[] { s });

#23


学习~!