三个类
类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);
}
foreach (PropertyInfo property in peroperties)
{
object[] objs = property.GetCustomAttributes(typeof(DescriptionAttribute), true);
}
#6
怎么会得不到?????
把类和属性的代码贴出来。。。
#7
up up ~
#8
Type objType = Type.GetType("ConsoleApplication1.A_B");
PropertyInfo[] pi = objType.GetProperties();
Console.WriteLine(pi[0].PropertyType);
结贴吧。
#9
给分呵呵
#10
PropertyInfo类有MemberType, Name(属性对象名), PropertyType(属性的类性)等等属性,不知道楼主要的是什么信息?
#11
你引用了没
#12
没有得到,你们都没测试
#13
using System.Reflection;
#14
学习了
#15
扯淡,这个就是从生产环境的代码中拷过来的。什么叫没测试
#16
................这里不知道如何写,请教C#反射高手(我想得到 obj_A 对象的类型 obj_B对象类型)
上面的那位,那我问题我如何得到 obj_B 的对象类型 B 你们的那个方法得到的是 list 对象
自已跟个B一样
上面的那位,那我问题我如何得到 obj_B 的对象类型 B 你们的那个方法得到的是 list 对象
自已跟个B一样
#17
靠,数组对象还不知道怎么用。。。不想多说了。走人
#18
这位楼主你的回答我没看明白,
#19
我们以obj_A来说明吧
首先获取obj_A
PropertyInfo prop = this.GetType().GetProperty("obj");
在获取你想要的泛型类型
string name = prop.PropertyType.GetGenericArguments()[0].FullName;
//相信这应该是你想要的结果吧
首先获取obj_A
PropertyInfo prop = this.GetType().GetProperty("obj");
在获取你想要的泛型类型
string name = prop.PropertyType.GetGenericArguments()[0].FullName;
//相信这应该是你想要的结果吧
#20
火药味好重。。。
#21
如果你连这个都有点看不懂,劝你还是放弃学编程吧,找点不用懂脑子的行业,其实也很好。
#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 });
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);
}
foreach (PropertyInfo property in peroperties)
{
object[] objs = property.GetCustomAttributes(typeof(DescriptionAttribute), true);
}
#6
怎么会得不到?????
把类和属性的代码贴出来。。。
#7
up up ~
#8
Type objType = Type.GetType("ConsoleApplication1.A_B");
PropertyInfo[] pi = objType.GetProperties();
Console.WriteLine(pi[0].PropertyType);
结贴吧。
#9
给分呵呵
#10
PropertyInfo类有MemberType, Name(属性对象名), PropertyType(属性的类性)等等属性,不知道楼主要的是什么信息?
#11
你引用了没
#12
没有得到,你们都没测试
#13
using System.Reflection;
#14
学习了
#15
扯淡,这个就是从生产环境的代码中拷过来的。什么叫没测试
#16
................这里不知道如何写,请教C#反射高手(我想得到 obj_A 对象的类型 obj_B对象类型)
上面的那位,那我问题我如何得到 obj_B 的对象类型 B 你们的那个方法得到的是 list 对象
自已跟个B一样
上面的那位,那我问题我如何得到 obj_B 的对象类型 B 你们的那个方法得到的是 list 对象
自已跟个B一样
#17
靠,数组对象还不知道怎么用。。。不想多说了。走人
#18
这位楼主你的回答我没看明白,
#19
我们以obj_A来说明吧
首先获取obj_A
PropertyInfo prop = this.GetType().GetProperty("obj");
在获取你想要的泛型类型
string name = prop.PropertyType.GetGenericArguments()[0].FullName;
//相信这应该是你想要的结果吧
首先获取obj_A
PropertyInfo prop = this.GetType().GetProperty("obj");
在获取你想要的泛型类型
string name = prop.PropertyType.GetGenericArguments()[0].FullName;
//相信这应该是你想要的结果吧
#20
火药味好重。。。
#21
如果你连这个都有点看不懂,劝你还是放弃学编程吧,找点不用懂脑子的行业,其实也很好。
#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 });
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
学习~!