原起:
我想做个动态加载Table的小例子,可弄了一天,发现了些让我很不解的问题
主题:
在主页中加载Table
protected System.Web.UI.WebControls.Table Table1;
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
InitTable();
}
}
private void InitTable()
{
ProCard proCard=new ProCard();
Table1.Rows.Add(proCard.addFirstNode());
//根据上一行生成新的行
Table1.Rows.Add(proCard.add(Table1.Rows[0]));
}public class ProCard
{
public TableRow addFirstNode()
{
TableRow firstRow=new TableRow(); TableCell firstCell=new TableCell();
firstCell.Text  ="first";
TableCell secondCell=new TableCell();
secondCell.Text="second"; firstRow.Cells.Add(firstCell);
firstRow.Cells.Add(secondCell); return firstRow;
}
public TableRow add(TableRow ParentRow)
{
TableRow reRow=new TableRow();
reRow=ParentRow;
//ParentRow.Cells.Clear();
TableCell newCell=new TableCell();
newCell.Text="newCell"; reRow.Cells.Add(newCell);
return reRow;
}
}问题一:在ProCard类add函数中把ParentRow.Cells.Clear();去掉注释,则reRow的所有Cells也会被清空,这种现象好像以前遇到过,但这是为什么?
问题二:结果只显示“first second newCell”,感觉好像是proCard.add函数改变了Table1.Rows[0],而且,设断点发现改变proCard.add(TableRow ParentRow)函数中的ParentRow,Table1.Rows[0]也确实会出现相应变化,这是为什么?

解决方案 »

  1.   

    第一个问题:因为reRow和ParentRow指向的是同一地址内容,所以共存亡。
    第二个问题:同第一个问题
      

  2.   

    一:那怎么样用值的形式赋值啊?
    二:我调用时没用ref啊,传的是地址吗?
      

  3.   

    net 和 java 都一样
     对象 包括 数组 传递都是以引用方式传递
      

  4.   

    那有没有好的方法以值的形式赋值或者说Copy一个对象出来啊?
    问题二还是有点想不明白,如果它也是传地址,那微软干吗还弄个ref出来啊?