关于.Net反射

terryfjh 2005-09-23 11:40:18
通过反射能不能遍历一个对象的Fields,并得到相应的值?注意,是对象而不是某个类,我需要得到各Fields的值
...全文
2078 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
terryfjh 2005-09-27
  • 打赏
  • 举报
回复
up
claus2001 2005-09-26
  • 打赏
  • 举报
回复
mark
ttjacky 2005-09-26
  • 打赏
  • 举报
回复
马克
terryfjh 2005-09-26
  • 打赏
  • 举报
回复
如果private Fields都能在类外部随便读/赋值,那是不是有点问题?
按理来说private成员只能在类内部使用
Johnny_de 2005-09-26
  • 打赏
  • 举报
回复
谢谢,这是非常不错的编程习惯!非常感谢!学习!!!
ljlsucfe 2005-09-26
  • 打赏
  • 举报
回复

谢谢 saucer(思归),正在试你提供的方法!十分感谢!
Johnny_de(天才): 用string.Empty是为了弥补变量没有初始化的缺陷。
luoshulin 2005-09-26
  • 打赏
  • 举报
回复
mark 以后有用
Johnny_de 2005-09-26
  • 打赏
  • 举报
回复
还想请问一个程序中的细节,你们用string.Empty是不是为了弥补变量没有初始化的缺陷?谢谢
Johnny_de 2005-09-26
  • 打赏
  • 举报
回复
感觉可以用递归解决下嵌套类
saucer 2005-09-26
  • 打赏
  • 举报
回复
sing System;
using System.Reflection;

class User
{
public string UserId=string.Empty;
public string UserName=string.Empty;
public User(string _userId,string _userName)
{
UserId=_userId;
UserName=_userName;
}
}

class TestField
{
private int i=12;
protected string sabc = "a";
public DateTime dt = DateTime.Now;
public User objUser=new User("001","张三");

static void Main()
{
TestField tf = new TestField();
GetProperties(tf);
}

static void GetProperties(Object t)
{
foreach (FieldInfo fi in t.GetType().GetFields(BindingFlags.Public|BindingFlags.Instance|BindingFlags.NonPublic))
{
object o = fi.GetValue(t);
Console.WriteLine("name:{0}==>value:{1}", fi.Name, o.ToString());
if (fi.FieldType.IsClass && !(o is String))
{
GetProperties(o);
}
}
}
}
dragonfly001 2005-09-26
  • 打赏
  • 举报
回复
向 saucer(思归) ( ) 学习
ljlsucfe 2005-09-26
  • 打赏
  • 举报
回复
请 saucer(思归)等各位大侠帮帮忙!
ljlsucfe 2005-09-26
  • 打赏
  • 举报
回复
见这个贴:
http://community.csdn.net/Expert/topic/4293/4293461.xml?temp=.4418909
PGLife 2005-09-26
  • 打赏
  • 举报
回复
真是厉害...............,学到东西了,马上去试验一下
chxuxu 2005-09-26
  • 打赏
  • 举报
回复
反射??没用过 学习
ljlsucfe 2005-09-26
  • 打赏
  • 举报
回复
请教后下,如果
private int i=12;
protected string sabc = "a";
public DateTime dt = DateTime.Now;
还有一个:
public Users objUser=new User("001","张三");
其中User类为:
class User
{
public string UserId=string.Empty;
public string UserName=string.Empty;
public User(string _userId,string _userName)
{
UserId=_userId;
UserName=_userName;
}
}
如何得到User对象中的UserId,UserName呢,请大家帮忙!
huanxiong0101 2005-09-26
  • 打赏
  • 举报
回复
学习~
cjzlxy 2005-09-26
  • 打赏
  • 举报
回复
学习
ljlsucfe 2005-09-26
  • 打赏
  • 举报
回复
t.GetType().GetFields(BindingFlags.Public|BindingFlags.Instance|BindingFlags.NonPublic)可以得到所有的属性,包括基类中的,是我自己弄错了,谢谢各位!
ljlsucfe 2005-09-26
  • 打赏
  • 举报
回复
Johnny_de(天才) :你所说的"所有指定的Field",是什么意思?如上例,假设TestField 是由TestBase继承下来的,TestBase中有一个:public string bb="bb";,调用t.GetType().GetFields(BindingFlags.Public|BindingFlags.Instance|BindingFlags.NonPublic)这句后,Fields集合中会有bb吗?
我试过System.Reflection.PropertyInfo[] properties = tf.GetType().GetProperties();这样得不到bb!
加载更多回复(10)

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧