asp.net应用程序变量是通过引用还是值传递的?

时间:2009-07-15 16:11:34

标签: asp.net variables

我最近发现,当在ASP.net应用程序中使用Session或Application对象时,它会通过引用传递值。

这在大多数情况下都很有用,但现在我在一个我真正需要数据副本的地方,而不是对它的引用,因为我会在完成处理时放弃对它的任何更改。

我也知道在应用程序的根目录中设置变量,有效地创建具有更好性能的全局应用程序变量,并消除会话/应用程序对象的所有投射疯狂。

有人知道应用程序变量是通过引用还是值传递?我似乎无法挖掘有关该主题的任何数据,并希望消除我目前必须将Application对象中的数据“复制”到新变量中进行处理的代码。

3 个答案:

答案 0 :(得分:4)

这本身并不是一种ASP.NET现象......它是所有.NET框架中CLI所固有的。你应该看看Jon Skeet的经典article on Parameter passing

假设您正在处理引用类型,如果要克隆对象而不是简单地复制对象的引用,则需要手动克隆它。 Here's a good article解释了如何深度复制对象以及为什么MemberwiseClone方法只创建对象的浅表副本。

答案 1 :(得分:3)

实际上,默认情况下会发生什么(假设您有引用类型而不是值类型)是它传递了参考副本。

所以你有一个不同的变量,但它指向同一个对象。

答案 2 :(得分:0)

“Application”变量只是一个常规成员变量。它就像任何其他变量一样工作,只是它的范围大于大多数。

如果复制变量的值取决于变量是否为值类型。

如果它是值类型,例如int,则始终复制该值。

如果它是引用类型,例如List<int>,则会获得对该对象的引用的副本。对象本身不会被复制。

因此,如果您需要复制的是引用类型,则必须明确创建副本。