我试图从其他类中更改对象值。理想情况下,我想将对象作为参数传递给构造函数/方法。到目前为止,我读过的东西,当作为参数传递时,对象的行为与引用相同,参数值在本地复制以用于方法的主体。所以这里是我测试的几个配置:C#通过另一个类更改对象值
案例#1。失败
class Processor
{
DataTable table;
public Processor(DataTable table)
{
this.table = table;
}
public void InitializeTable()
{
if (table != null)
{
// Fill data into DataTable.
}
}
}
static void Main(string[] args)
{
DataTable mainTable = new DataTable();
Processor processor = new Processor(mainTable);
processor.InitializeTable();
// mainTable still empty
}
我想Processor
表持有同样的参考mainTable
,但Main
执行mainTable
年底还空着,而Processor
表中弥漫。
案例#2。失败
public Processor(ref DataTable table)
{
this.table = table;
}
我使用ref
签名试过,但结果还是一样(mainTable
是空的)。
案例#3。失败
public void InitializeTable(DataTable table)
{
// Fill data into table
}
我已经去除了构造函数和饲料mainTable
到InitializeTable()
方法和结果还是一样(mainTable
是空的)。
案例#4。作品!
public void InitializeTable(ref DataTable table)
{
// Fill data into table
}
最后这个工程!将ref mainTable
送入InitializeTable
现在成功填写mainTable
。这背后有什么解释?为什么构造函数没有与mainTable
相同的引用?当传递对象作为参数时,为什么ref
关键字仍然需要传递它的引用?
'InitializeTable()'实际上做了什么?在第一个完整的例子中,我肯定希望'mainTable'反映所做的任何修改,因为在内存中只有一个实际的'DataTable'实例化了。 – David
简单的查询从数据库中获取数据,并将其分配给表。是的,我也有相同的假设,但只有case#4填充mainTable。 – Suwandy
“你把它分配给表”是什么意思?如果代码没有达到你期望的程度,不要模糊地描述代码,并假定它必须工作,实际上检查它。 – David