请教如何动态创建属性相同但类名不同的类?
要返回一些代码表,结构都是一样的 DM,MC,等
传的参数 例如 "MZB,ZWZCB,XBB,,,," 或者全部
根据传的参数 在库中各个代码表查询到数据后,封装到一个总的类里,用户传几个表名,就返回几个表
我现在这么建的:
     public class SqxxModel
     {
         public SqxxModel()
         {
         }
         private int _flag;
         private string _errInfo;
         private  List<MZB> mzList = new List<MZB>();
         private  List<ZWZCB>  zwzcList  = new List<ZWZCB>();
         。。。。。列全了所有代码表的类  
         public  void AddCjsqxxs(MZ mz)
         {
             mzList.Add(mz);
         }
         public  void AddYxzjxxs(ZWZCB zwzc)
         {
             zwzcList.Add(zwzc);
         }   
         。。。。。。列全了所有加入代码表的方法
     }
举一个民族的例子,其他代码表的结构都一样,都是DM,MC
      public class MZ
     {
         public MZ()
         {
         }
         private string _DM;
         private string _MC;
         public string DM
         {
             get { return _DM; }
             set { _DM= value; }
         }
         public string MC
         {
             get { return _MC; }
             set { _MC= value; }
         }     
====
以上这么写感觉太多,需要开发时列出所有的代码表,感觉太累赘,能不能根据用户传的参数,有几个代码表就动态创建这几个代码表的类?总类就加载几个代码表的类
------解决方案--------------------用反射。或者用泛型,将这些类从同一个类继承,并且作为泛型约束。
------解决方案--------------------
呵呵,好熟悉的代码命名规则,楼主一定来自北四环中路211号吧。
方法应该有好多
一种是,既然所有代码表都一个结构,不如创建一个通用代码表结构类和一个集合类
简单实现如下
  public class DMBStructure
 {
 public DMBStructure()
 {
 }
 private string _DM;
 private string _MC;
 public string DM
 {
 get { return _DM; }
 set { _DM= value; }
 }
 public string MC
 {
 get { return _MC; }
 set { _MC= value; }
 }
}
public class DMBCollection
 {  
 private string _tableName;
 private List<DMBStructure> _items= new List<DMBStructure>();
 public string TableName  
 {
 get { return _tableName; }
 set { _tableName= value; }
 }
  public List<DMBStructure> Items
 {
 get { return _items; }
 set { _items= value; }
 }
.....
}
然后搂主创建一个管理类,统一管理代码表。你可以在里边搞一个hashtable或者dictionary什么的用来关联DMBCollection类的实例,key就直接是表名就可以了,以便访问时方便。
还有一种方法,可以向你的那样每个代码表一个类,但类是动态生成和编译的,然后用反射调用这些类。
如果楼主担心频繁调用反射影响性能,可以动态生成那些类中方法的委托,然后挂到变量上去调用。动态生成具体技术涉及CodeDom或Emit,楼主可以看下微软的技术文档。
希望对你有帮助:)