Ron*_*del 0 c# session webforms
Session我的.Net Webforms项目中的对象具有一些奇怪的功能(至少对我而言).我正在传递对象Sessions并且我没有使用任何global变量.我有一个描述如下的方法:
private int Foo()
{
RmRule ruleInEdit = (RmRule)Session["ruleInEdit"];
//here ruleInEdit.subjectAreaID=0
bool isValid = Validate();
if (isValid)
{
//do some stuff
//here ruleInEdit.subjectAreaID is 10 instead of 0
//the Validate function modified the ruleInEdit object
}
//other code
}
private bool Validate()
{
bool isValid;
//check some stuff
RmRule rule = (RmRule)Session["ruleInEdit"];
rule.subjectAreaID = 10;
Session["ruleInEdit"] = rule;
return isValid;
}
Run Code Online (Sandbox Code Playgroud)
我认为subjectAreaID的值仍应为0但显然我误解了一些东西.ruleInEdit当我将对象写回时,.Net如何(或为什么)自动更新对象Session.
Foo,我不应该强制ruleInEdit再次读取会话以获取更新的对象和属性吗?您不必将对象写回会话集合,它永远不会离开.
该对象只有一个实例,当您从会话集合中读取它时,它不会被复制.您对该对象所做的任何更改都会立即显示在查看同一实例(即同一会话)的所有代码中.
存储在会话集合中的内容只是对象的引用.对象本身存储在堆上.
| 归档时间: |
|
| 查看次数: |
760 次 |
| 最近记录: |