看看下面的例子:C#指針問題
public void inc(int num) {
num++;
}
int a = 5;
inc(a);
在這種情況下,inc
將不會增加a
變量本身。它並不指向內存中的相同位置。爲了改變a
,我將不得不使用ref
。
然而,在這個例子中
public static void ExportSelectedRow(GridView gridView, object toObject, int skipCols)
{
GridViewRow gridViewRow = gridView.SelectedRow;
if (toObject is DataTable)
{
DataTable returnDt = (DataTable)toObject;
GridViewColsToDatatable(gridView, returnDt, skipCols);
DataRow dr = returnDt.NewRow();
for (int i = skipCols; i < gridViewRow.Cells.Count; i++)
dr[i - skipCols] = gridViewRow.Cells[i].Text;
returnDt.Rows.Add(dr);
}
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) {
DataTable dt = new DataTable();
GridViewHelper.ExportSelectedRow(GridView1, dt, 1);
...
}
選定的行會從GridView1
導出到DataTable
雖然我沒有,即使在函數中引用它。所以toObject
將被更新。看來,
DataTable returnDt = (DataTable)toObject;
實際上是參考toObject
。所以我的問題,爲什麼在這個例子中它是一個參考,但在第一個,它不是?
請注意,'ref'參數值實際上是對字段,局部變量或數組元素的類型化引用 - 它不是指針。可以認爲它是「對被調用代碼中變量的更改應該會導致對調用代碼中的變量進行更改」。它是從引用發生的底層實現中抽象出來的,並且比指針(它可能指向內存中的任何位置,而類型化引用受到高度限制)更加嚴格。 –