gpt4 book ai didi

c# - 变量声明,它是创建对实际对象的引用还是副本?

转载 作者:行者123 更新时间:2023-11-30 16:54:07 24 4
gpt4 key购买 nike

我正在查看 Web 应用程序的源代码,我可以看到大量用例,例如下面的示例代码。我在网上找不到任何有关在 C# 中声明局部变量(复杂类型)的信息,只是想确定它是否创建了该对象的引用或副本。来自 JavaScript 背景,我想它总是创建一个引用,除非它是原始数据类型。

代码是这样的

CustomItemType myVarA = (CustomItemType) this.Session["VAR_1"];

// Do some work on the properties of VAR_1
int num2 = checked (myVarA.Items.Count - 1);
int index = 0;
while (index <= num2)
{
myVarA.Items[index].StatusCode = "Posted";
checked { ++index; }
}

// Save back to the session
this.Session["VAR_1"] = (object) myVarA;

我认为不需要以下行是否正确。

// Save back to the session
this.Session["VAR_1"] = (object) myVarA;

由于局部变量 myVarA 只是对 session 中属性的引用,所以如果您更新局部变量,那么您也会更新 session 对象吗?

其次,当每个网页都在一个新线程中提供时,这些多个线程将访问同一个 session 对象并同时进行操作,这会不会造成问题?

最佳答案

  1. 原始数据类型和结构(声明为struct)是'byvalue', classess(声明为 class)是'by reference'。所以取决于 CustomItemType 是什么。
  2. 是的,它会带来潜在的线程同步问题。在一个简单的情况下,您可以将对象操作放在 lock block 中。

关于c# - 变量声明,它是创建对实际对象的引用还是副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30838504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com