日期:2014-05-18  浏览次数:20774 次

求救!! --[反射]
现在学到反射, 一头雾水啊!
  有人说:
可以copy 对象,
可以找到dll 类中隐藏的方法与属性。
不知怎么理解。
下面是用反射做的copy 对象;---求解


C# code
//--猫类
public class Cat
{
    public int Age { get; set; }
    public string Name { get; set; }
    //假设它的属性还有很多很多
}
//--测式Copy
private void button3_Click(object sender, EventArgs e)
{
    Cat c1 = new Cat() { Age = 20, Name = "小猫" };
    Type type = typeof(Cat);
    Cat c2 = new Cat();
//---下面这段的foreach 是什么意思?它做了什么?
    foreach (PropertyInfo info in type.GetProperties())
    {
        info.SetValue(c2, info.GetValue(c1, null), null);
    }
    labName.Text = c2.Name;
    labAge.Text = c2.Age.ToString();
}


------解决方案--------------------
只说一句,如无必要,请不要使用反射,反射使用的越多,说明你的结构设计的越不合理。
------解决方案--------------------
就是让你把string变成class~
------解决方案--------------------
让你不知道程序集里内容的时候来使用程序集
------解决方案--------------------
Type type = typeof(Cat);
//上面去的Cat类的Type类型
GetProperties取得里面所有的属性,然后遍历,为每个属性赋值
foreach (PropertyInfo info in type.GetProperties())
{
info.SetValue(c2, info.GetValue(c1, null), null);
}
帮助是你最好的老师,一定要看

------解决方案--------------------
楼主你分析这个代码。
C# code
Cat c1 = new Cat() { Age = 20, Name = "小猫" };
Type type = typeof(Cat);
StringBuilder sb = new StringBuilder();
foreach (PropertyInfo info in type.GetProperties())
{
    sb.Append(info.Name+"\t"+info.GetValue(c1, null).ToString()+"\r\n");
}
MessageBox.Show(sb.ToString(),"提示");