比如:
我程序读取了数据后
例如数据库的一张表的结构字段
假设只有在程序运行时我程序才知道读到了那些字段,例如表 person
读到的字段有name,age数据类型分别为string int
现在程序是在运行的
我想程序在此刻生成一个类
public classic Person
{
private string name;
private int age;
}然后我能够调用
在C++种听别人说,这种编译型的语言好型不可能实现,是这样吗?在c#种有办法实现吗?
c#种的构造出类型来,然后反射可以做到吗,我感觉左面不行呀。。高手来解答呀
我程序读取了数据后
例如数据库的一张表的结构字段
假设只有在程序运行时我程序才知道读到了那些字段,例如表 person
读到的字段有name,age数据类型分别为string int
现在程序是在运行的
我想程序在此刻生成一个类
public classic Person
{
private string name;
private int age;
}然后我能够调用
在C++种听别人说,这种编译型的语言好型不可能实现,是这样吗?在c#种有办法实现吗?
c#种的构造出类型来,然后反射可以做到吗,我感觉左面不行呀。。高手来解答呀
看看这篇,它的需求和我的一样。
CSharpCodeProvider p = new CSharpCodeProvider();
CompilerParameters param = new CompilerParameters(new string[] { "System.dll" });
string s = "namespace __ns{public class AAA{ public string name{get{return '";}} }}";
CompilerResults rel = p.CompileAssemblyFromSource(param, s);
Type t = rel.CompiledAssembly.GetType("");
object o = t.GetConstructor(System.Type.EmptyTypes).Invoke(null);
MessageBox.Show(t.GetProperty("name").GetValue(o, null).ToString());参考
看了这么多NR的回帖,我从中得到了一些信息
首先说明几点:
1.
动态创建实例
动态创建类
动态创建类型
通过不同方法都可以实现
2.
反射出对象的实例是个object,我转化成谁列?(在预先不知道类,也不知道此类和谁有什么关系,比如继承)这种情况下反射出来的类毫无意义,它仅仅只是个object,当然我们可以获得或是设置属性值(GetProperty("name").GetValue(o, null)),但是不能NEW 类名的方式获得,还是有点欠缺,不能满足我最上面的需求,