繁体   English   中英

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

[英]Do asp.net application variables pass by reference or value?

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

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

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

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

这本身并不是一种ASP.NET现象......它是所有.NET框架中CLI所固有的。 你应该看看Jon Skeet 关于参数传递的经典文章

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM