环境:VS2005 C# winForm是的,google里很多反射方面资料,不过基本上都是互抄的。最主要一点:它只是作者在复述自己所掌握的东西而不是把知识教给新手。class A
{
   public A(){}
   string name = "";
   public string Name
   {
       get{return name;}
   }
  
   public void SetName(string value)
   {name = value;}
}请问如何动态创建类A的对象?之后如何调用动态对象的Name属性和SetName方法?

解决方案 »

  1.   

    真是个古怪的问题。
    首先你的命名就不好了,建议去看看命名规则。
    再次,你莫非属性。变量搞不清的?
    string name = "";
      public string Name
      {
      get{return name;}
      }
       
      public void SetName(string value)
      {name = value;}
    这是在干什么?
    属性有get set方法的好不
    string name = "";
      public string Name
      {
        get{return name;}
        set{name = value;}
      }不就是A instanceOfA=new A();
    string name=A.Name;
    么。
      

  2.   

    这个问题,你看msdn就够了,不要问了
      

  3.   

    自己试了个简单办法:using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Reflection;
    using System.Text;
    using System.Windows.Forms;namespace 反射
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.Load += new EventHandler(Form1_Load);
            }        object cl;
            Type t;        void Form1_Load(object sender, EventArgs e)
            {
                cl = Activator.CreateInstance(Type.GetType("反射.Class1"));
                t = cl.GetType();
                foreach(PropertyInfo pi in t.GetProperties())
                {
                    this.listBox1.Items.Add(pi.Name);
                }            foreach (MemberInfo mi in t.GetMethods())
                {
                    this.listBox1.Items.Add(mi.Name);
                }
            }        private void button1_Click(object sender, EventArgs e)
            {
                object[] par = new object[] { 3 };
                t.InvokeMember("setvalue", BindingFlags.Default | BindingFlags.InvokeMethod, null, cl, par);            int v = (int)t.InvokeMember("myvalue", BindingFlags.Default | BindingFlags.GetProperty, null, cl, new object[] { });            this.textBox1.Text = v.ToString();
            }
        }
    }