比如:
我程序读取了数据后
例如数据库的一张表的结构字段
假设只有在程序运行时我程序才知道读到了那些字段,例如表 person
读到的字段有name,age数据类型分别为string int 
现在程序是在运行的
我想程序在此刻生成一个类
public classic Person

   private string name;
   private int age;
}然后我能够调用
在C++种听别人说,这种编译型的语言好型不可能实现,是这样吗?在c#种有办法实现吗?
c#种的构造出类型来,然后反射可以做到吗,我感觉左面不行呀。。高手来解答呀 

解决方案 »

  1.   

    http://topic.csdn.net/u/20090903/15/d8bef424-3199-40d0-8212-4bed30093089.html
    看看这篇,它的需求和我的一样。
      

  2.   

    CodeDom技术http://www.cnblogs.com/lichdr/archive/2004/11/02/59620.htmlhttp://www.cnblogs.com/lichdr/archive/2004/11/03/59940.html
      

  3.   

    PropertyInfo[] ?用反射获取属性集合?
      

  4.   

    匿名类
    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());参考
      

  5.   

    C#估计能做到,只是我感觉应该直接提供这种动态创建类,动态创建函数和其它所有的功能。这样才能更灵活。但我也想到一个问题,就是安全问题,如果这样动态,做出来的病毒都是动态生成自己的病毒代码,估计杀毒软件就无乱怎样都查询不出来了。不过现在的jscript.net已经能直接做到这些了。
      

  6.   

    你这个需求,根本不需要动态编译的需求,因此就算你生成了这样的类,你也无法正常的那样使用,你也是只能反射来读取,那你还不如,直接用DataSet来取
      

  7.   

    个人总结:
    看了这么多NR的回帖,我从中得到了一些信息
    首先说明几点:
    1.
    动态创建实例
    动态创建类
    动态创建类型
    通过不同方法都可以实现
    2.
    反射出对象的实例是个object,我转化成谁列?(在预先不知道类,也不知道此类和谁有什么关系,比如继承)这种情况下反射出来的类毫无意义,它仅仅只是个object,当然我们可以获得或是设置属性值(GetProperty("name").GetValue(o, null)),但是不能NEW 类名的方式获得,还是有点欠缺,不能满足我最上面的需求,