这听起来像是一个愚蠢的问题,但我偶然发现了这一点。我知道您可以使用ref
通过引用传递参数。但我有这个方法
public void SaveRecordsIntoTemporaryTable(DataTable objDataTable, string userSessionID)
{
// The objDataTable has 5 columns "Id", "Name", "Tag_1", "Tag_2", "Tag_3"
// Now in here I remove "Tag_1", "Tag_2", and "Tag_3"
objDataTable.Columns.Remove("Tag_1");
objDataTable.Columns.Remove("Tag_2");
objDataTable.Columns.Remove("Tag_3");
...
}
现在我在第三行设置了一个调试点,但是在删除此列"Tag_3"
之后,我将光标悬停在参数objDataTable
上,DataTable
它也显示了删除了列?那么,它是通过引用传递的吗?
更新
好的,如果它被reference
传递,如果我使用ref
会有什么不同?
答案 0 :(得分:6)
那么,它是通过引用传递的吗?
其地址按值传递。由于DataTable
是一个类(引用类型),因此它的地址通过值传递,因此您可以看到更改。
尝试做:
objDataTable = null;
如果真的通过引用传递,那么您会看到来电者将DataTable
设置为null
,但将设置为。
答案 1 :(得分:-1)
DataTable
,从对象派生的任何其他内容都通过引用传递。如果您明确地将其作为ref
传递,则引用将通过引用 - 允许您将变量更改为指向另一个DataSet
(或null)。
修改 - 忽略第一句话。它应该是DataTable
,从object
派生的任何其他内容都是引用类型。
调用按值传递引用类型的方法仍允许修改类型的属性。