首先我把一个myClass类放到Hashtable里面 
Hashtable valHas=new Hashtable()
valHas.add("类1",typeof(myClass));然后我想读到"类1"的时候我想得到 myClass类 
我不想用反射,所以我把类存到一个容器里面 ,
然后通过不同的key得到相应的类如 myCalss a=(type)valHas["类1"];(这个不行,只是一个实现目的)

解决方案 »

  1.   

    你不想用反射的话,那用 typeof 做什么呢Hashtable valHas=new Hashtable() 
    valHas.add("类1",myClass); 
      

  2.   

    楼主是不是要这样
    class A{}
    class B : A{}hs.Add("A", typeof(A))
    hs.Add("B"), typeof(B))然后通过输入"A"构建新A,输入"B"构建新B?
      

  3.   

    不用反射,这样做很别扭
    楼上.. 又见灰太狼,发现CSDN好多灰太狼
      

  4.   

    不用反射
    十分别扭的写法如下:
      private void Form1_Load(object sender, EventArgs e)
            {
                Hashtable ht = new Hashtable();
                ht.Add("string", "string");
                ht.Add("int", 1);
                ht.Add("object", new object());
                foreach (DictionaryEntry de in ht)
                {
                    switch (de.Key.ToString())
                    {
                        case "string":
                            string s = (string)de.Value;
                            break;
                        case "int":
                            int i = (int)de.Value;
                            break;
                        case "object":
                            object o = (object)de.Value;
                            break;
                        default:
                            break;
                    }
                }
            }
      

  5.   

    Hashtable 类和 Dictionary<(Of <(TKey, TValue>)>) 泛型类实现 IDictionary 接口
    public virtual void Add(object key,object value. );Hashtable ht= new Hashtable();
    ht.Add("1", "string");foreach (DictionaryEntry h in ht)
    {
        Console.WriteLine("{0} {1}", h.Key, (string)h.Value);
    }
      

  6.   

    这样说把我用appdomain可以实现我需要的功能,但是这样性能上我感觉不太好。那你们用反射怎么实现。我要看实现代码。谢谢各位 
    而且我就是把类typeof之后加载到Hashtable里面。不是加载类的字符串到Hashtable实现反射。
    高手来看看。
      

  7.   

    Hashtable没有问题是可以的 
    myCalss是一个类 a是类一个实例
    (type)valHas["类1"]是一个类
    类 是不可能 赋给一个实例的myCalss a=(type)valHas["类1"];
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;
    using System.Reflection;namespace TestTest
    {
        public class Class1
        {
            public void TestA()
            {
                Hashtable ht = new Hashtable();
                ht.Add("a", typeof(A));
                ht.Add("b", typeof(B));            A a = (A)((Type)ht["a"]).Assembly.CreateInstance(ht["a"].ToString());
                a.C = "aaa";
                Console.WriteLine(ht["b"].ToString());
                Console.WriteLine(a.C);
            }
        }
        public class A
        {
            public String C;
        }
        public class B
        {
        }
    }
      

  8.   

    如果不想用反射的话 可以
    在hashtable添加 类实例如 
    ht.Add("a",new A()); //但是要注意类是不是可以被用成单个实例。最好是用工厂来创建实例
      

  9.   

     Type type = Type.GetType("");
     object o= (object)Activator.CreateInstance(type,null);
      

  10.   

     T Instance = Activator.CreateInstance(typeof(T));
      

  11.   

    delegate object CreateObjectInvoker();
    object CreateA(){ return new A();}
    object CreateB(){ return new B();}
    object CreateC(){ return new C();}Dictionary<string, CreateObjectInvoker> hs = new ....;
    hs.Add("A", CreateA);
    hs.Add("B"), CreateB);
    hs.Add("C"), CreateC);
    object a = hs[”A"].Invoke();
      

  12.   

    谢谢各位,我自己没写清楚。我不想得到实例。如 myCalss a=(type)valHas["类1"];(这个不行,只是一个实现目的)  这句话我写错了,我就想得到myCalss 而不是一个实例.楼上各位师兄都回答的很好。再次感谢一下。大家来继续看看
      

  13.   


        [Serializable]
        public class Entity
        {
            public int ID { set; get; }
            public string Name { set; get; }    }            Hashtable valHas = new Hashtable();
                valHas.Add("类1", typeof(Entity));
                Entity e = new Entity();
                valHas.Add("类2", e.GetType());
                Entity e1 = Activator.CreateInstance(valHas["类1"] as Type) as Entity;
                if (e1 != null)
                {
                    e1.ID = 1;
                    e1.Name = "Sandy";
                }