首先我把一个myClass类放到Hashtable里面
Hashtable valHas=new Hashtable()
valHas.add("类1",typeof(myClass));然后我想读到"类1"的时候我想得到 myClass类
我不想用反射,所以我把类存到一个容器里面 ,
然后通过不同的key得到相应的类如 myCalss a=(type)valHas["类1"];(这个不行,只是一个实现目的)
Hashtable valHas=new Hashtable()
valHas.add("类1",typeof(myClass));然后我想读到"类1"的时候我想得到 myClass类
我不想用反射,所以我把类存到一个容器里面 ,
然后通过不同的key得到相应的类如 myCalss a=(type)valHas["类1"];(这个不行,只是一个实现目的)
valHas.add("类1",myClass);
class A{}
class B : A{}hs.Add("A", typeof(A))
hs.Add("B"), typeof(B))然后通过输入"A"构建新A,输入"B"构建新B?
楼上.. 又见灰太狼,发现CSDN好多灰太狼
十分别扭的写法如下:
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;
}
}
}
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);
}
而且我就是把类typeof之后加载到Hashtable里面。不是加载类的字符串到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
{
}
}
在hashtable添加 类实例如
ht.Add("a",new A()); //但是要注意类是不是可以被用成单个实例。最好是用工厂来创建实例
object o= (object)Activator.CreateInstance(type,null);
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();
[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";
}