自定义 一个类    public class MyTest 
    {
       public string myString = "abc";       public string ShowMessage()
       {
           return myString;
       }
    }如果我知道类名,即string str="Mytest";如何得到这个类型MyTest?

解决方案 »

  1.   

    Type t = Type.GetType(str);
      

  2.   

    其实这就已经属于反射了
    这种写法只是适用于你要获取的类与你的代码在同一个程序集中
    否则还要使用
    Assembly.Load来获取程序集
      

  3.   

    那这样得到的t如果想当作MyTest类型直接用怎么办?我不想强制转换,因为可能有许多这样的类,程序运行过程中我并不知道现在正在用的是MyTest、MyTest1或是MyTest2……,有什么办法么?
      

  4.   


    namespace MyLib
    {
        public class MyTest
        {
            public string myString = "abc";        public string ShowMessage()
            {
                return myString;
            }
        }
    }不是同一程序集的namespace WindowsFormsApplication
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                Assembly ass = Assembly.Load("MyLib");
                Type t = ass.GetType("Mytest");
                MyTest test = (MyTest)ass.CreateInstance(t.FullName);
                string s = test.ShowMessage();
                
            }
        }
    }t为什么总是null
      

  5.   

    namespace WindowsFormsApplication
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                Assembly ass = Assembly.Load("MyLib");
                Type t = ass.GetType("MyLib.Mytest");
                MyTest test = (MyTest)ass.CreateInstance(t.FullName);
                string s = test.ShowMessage();
                
            }
        }
    }
      

  6.   

    按9楼的方法修改后t可以取到了。像我之前说的,假如在用的时候我不知道MyTest或是MyTest1或是MyTest2,下面也就没办法定义MyTest test = (MyTest)ass.CreateInstance(t.FullName);
    并进行强制类型转换,但是我还想知道到底是MyTest类型,或是MyTest1类型,或是MyTest2类型,有办法做到么???