Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 作为参数传递的对象未更新_C#_Windows_Mvp - Fatal编程技术网

C# 作为参数传递的对象未更新

C# 作为参数传递的对象未更新,c#,windows,mvp,C#,Windows,Mvp,演讲者 这里我调用了一个名为services.updateSelectedDepository;的方法;。正如您所看到的,它调用了下面服务中的一个方法,该方法调用存储库中的一个方法,以根据DepositID设置存款模型 public void OnDoubleClicked(object sender, EventArgs e) { if(addTipView.DataGridView.CurrentRow.Index != -1) { deposit.Depo

演讲者 这里我调用了一个名为services.updateSelectedDepository;的方法;。正如您所看到的,它调用了下面服务中的一个方法,该方法调用存储库中的一个方法,以根据DepositID设置存款模型

public void OnDoubleClicked(object sender, EventArgs e)
{

    if(addTipView.DataGridView.CurrentRow.Index != -1)
    {
        deposit.DepositID = Convert.ToInt32(addTipView.DataGridView.CurrentRow.Cells["DepositID"].Value);
        Console.WriteLine(deposit.DepositID);
        services.UpdateSelectedDeposit(deposit);
        Console.WriteLine(deposit.DepositAmount);
        addTipView.TxtTipAmount = deposit.DepositAmount.ToString();
        addTipView.TxtDate = deposit.DepoistDate.ToString();
        addTipView.TxtHoursWorked = deposit.HoursWorked.ToString();

    }
}
服务

存储库

当我在存储库中打印存款金额时,我得到了正确的值,但当我在presenter中打印存款金额时,它不正确。作为参数传递的存款类是通过引用传递的,对吗?为什么我的值在presenter中不正确。

将对象传递给松散使用的方法术语时,实际上是在传递引用,但是这里的重要一点是通过值传递对该对象的实际引用。这意味着更新它覆盖它不会在调用链的更高层执行任何操作

如果要覆盖该引用并逐个传递引用,则需要在适当的情况下使用ref关键字

public void GetSelectedDeposit(ref Deposit deposit)

好的,那么当我改变方法中的对象时,它会在堆上创建一个新对象吗?另外,为了帮助我理解,在java中,情况并非如此,对吗?我知道Java将在参数中传递引用的值,但本质上它们将在堆上引用相同的对象。所以这在Java中是可行的。是吗?@asnyder002不必担心堆栈和堆,但是,是的,您将在内存中的不同位置获得一组新的内存,以及该内存的不同引用地址。我不确定java是做什么的,但是我假设它们在工作方式上非常相似,请不要引用我的话。如果您只是在该地址更改对象,即更改属性,那么您不需要ref-its,仅当您尝试为引用分配一个新的引用时,您在本例中是这样的啊,您的最后一句话确实让它为我点击。谢谢你的帮助。
public void GetSelectedDeposit(Deposit deposit)
{
    using (var context = new TipManagerDBEntities())
    {
        deposit = context.Deposits.Where(x => x.DepositID == deposit.DepositID).FirstOrDefault();
        Console.WriteLine(deposit.DepositAmount);
    }
}
public void GetSelectedDeposit(ref Deposit deposit)