我用第一种方法,把要使用的公共方法做成静态的,如:
public static GetMyString(){
return "hello,world!";
}
调用时不需new,这样:
string mystr=MyCommon.GetMyString();

解决方案 »

  1.   

    但用第一种方式有这个问题,前面忘记说了。
    比如有这样一个公共数据访问类:
    public class db
    {
      private DataTable m_DataTable;
      public DataTable execsql(param...)
      {
        ...
        m_Adapter.Fill(m_DataTable);
        return m_DataTable;
       }
    }现在,我有这样一个实际的调用序列:
    DataRow dr = db.execsql('select * from table1').Rows[0];
    string a = dr[0];
    string b = dr[1];
    //现在我需要用dr[2]的值从数据库中来得到另一个值,有可能是一个下拉列表,需要邦定值
    DropDownList1.datasource = db.execsql('select c1, c2 from table2 where c3 = ' + dr[3]);
    DropDownList1.bind();
    //注意,下面这句的数据将出错,因为这个时候,DB中的m_DataTable已经不对了
    string c = dr[4];
      

  2.   

    public class db
    {
      private static DataTable m_DataTable;
      public DataTable execsql(param...)
      {
        if (m_DataTable==null)
          m_DataTable=new DataTable();
        ...
        m_Adapter.Fill(m_DataTable);
        return m_DataTable;
       }
    }
      

  3.   

    webdiyer说的办法似乎不行,编译的时候提示错误,说是没有返回类型
      

  4.   

    用 cxx1997(小网虫_L) 的方法应该还是不行:因为m_DataTable是static,所以第二次执行execsql()时,m_DataTable中的数据还是已经改变了:(
      

  5.   

    关键是采用new的方法究竟会慢多少?我个人的感觉是3-4%左右,虽然你最好还是自己做一下试验。对象内存分配在.NET里面非常快,GC也只会隔很长一段时间才进行一次。
    如果采用第二种方法,如你所说,需要许多逻辑判断的话,我认为如果效率上的改进不大,没有必要。
      

  6.   

    谢谢各位,我现在决定这样处理:
      对SqlConnection,CommandBuilder,SqlCommand,DataAdapter这类不需要保存旧有的值的对象,在公共类中只存在一个实例
      而对DataSet,DataTable这类有可能取旧有值对对象,就每次访问,都new一次,最后用.NET自己收集
      

  7.   

    哦,对不起,我那个方法错了,应该加上返回类型string:
    public static string GetMyString(){
    return "hello,world!";
    }