如题,谢谢!

解决方案 »

  1.   

    作为参数传递没有特别制定ref就是拷贝,返回也是拷贝
      

  2.   

    引用拷贝
    因为他们都是从object继承的值类型才是传值
      

  3.   

    我认为是传拷贝(深拷贝)。例子:
    public DataTable SelectDataBase(string tempStrSQL)
    {
    this.myConnection = new SqlConnection(connectionString);
    DataSet tempDataSet = new DataSet();
    this.da = new SqlDataAdapter(tempStrSQL,this.myConnection);
    this.da.Fill(tempDataSet);
    return tempDataSet.Tables[0];
    }
    如果是传引用,那么上例中就有问题,tempDataSet是临时DataSet对象,函数运行结束就无效了
      

  4.   

    楼上理解有误
    tempDataSet并没有被GC回收
    因为GC探测到它还会被使用
    也就是应用程序根指向了它我也说不太清楚,可以看看《.net框架程序设计》的gc相关章节
      

  5.   

    chengbo1983:你说的对,我又写代码测试了一遍,证明确实是传引用
    private void Form1_Load(object sender, System.EventArgs e)
    {
    DataTable qwert = new DataTable();
    qwert = QWERT("Select * From Customers");
    //this.dataGrid1.DataSource = qwert;//可以去除注释测试 DataTable asdfg = new DataTable();
    asdfg = qwert;
    //asdfg = qwert.Copy();//和上一行切换进行测试
    this.dataGrid2.DataSource = asdfg;
    }
    private DataTable QWERT(string strCon)
    {
    SqlConnection myConnection = new SqlConnection("packet size=4096;integrated security=SSPI;data source=localhost;persist security info=False;initial catalog=Northwind");
    DataSet tempDataSet = new DataSet();
    SqlDataAdapter da = new SqlDataAdapter(strCon,myConnection);
    da.Fill(tempDataSet);
    this.dataGrid1.DataSource = tempDataSet.Tables[0];//注意此行
    return tempDataSet.Tables[0];
    }
    测试结果是,如果注释掉这一行asdfg = qwert.Copy();那么对dataGrid1、dataGrid2的新增、修改操作是同步的,即它们数据源是一个。看来,.Net的编程方式和以前有了颠覆性的改变(可以传临时变量的引用),我还要学很多基础性的知识。