日期:2014-05-18  浏览次数:21063 次

请教如何动态创建属性相同但类名不同的类?
要返回一些代码表,结构都是一样的 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,楼主可以看下微软的技术文档。

希望对你有帮助:)