关于using(){}

niening314 2012-09-29 05:28:25
using(DataTable dt = ***)
{
Cache["**"] = dt;
}

执行完后 Cache["**"]指向的 dt 还存不存在??
或者说 再次掉用 Cache["**"] 能否获取到 dt数据
...全文
164 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
niening314 2012-10-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

这类问题的判断标准是你要看:“是否知道Dispose方法里到底执行了什么?”。对于那些根本不知道Dispose方法里执行什么的人,可能只会吓唬自己,根本不知道“释放”是什么具体含义。
[/Quote]

对呢!我晓得dt会执行Dispose方法,但是不一定会立即被释放掉,到底怎么样才会被释放掉我不明白!所以我才担心 再次 Cache["**"] 会得不到数据
  • 打赏
  • 举报
回复
这类问题的判断标准是你要看:“是否知道Dispose方法里到底执行了什么?”。对于那些根本不知道Dispose方法里执行什么的人,可能只会吓唬自己,根本不知道“释放”是什么具体含义。
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
using(DataTable dt = ***)
{
Cache["**"] = dt;
}

执行完后 Cache["**"]指向的 dt 还存不存在??
或者说 再次掉用 Cache["**"] 能否获取到 dt数据
[/Quote]

1. 存在。
2. 能获取到dt数据。
devmiao 2012-09-29
  • 打赏
  • 举报
回复
可以得到dt,但是继续使用它是危险的。
好比如下代码:

Cache["**"] = dt;
dt.Dispose();
Cache["**"].xxxx //再访问dt是危险的,dt已经被释放了。
jakecheng 2012-09-29
  • 打赏
  • 举报
回复
两个没有关系吧……using只是针对dt的,又不是cache的。cache不存在,看看你的dt有没有数据,或者看看你后面执行的操作是不是清空了cache
niening314 2012-09-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

Cache["**"] 这个跟 using没有关系。
using(datatable dt = **)
{

}

只是表示出了using结尾的}之后,这个dt就会被回收。
所以dt是不存在,而缓存是存在的。
[/Quote]

DataTable dt2 = (DataTable)Cache["**"]
dt2 能获取到数据?

dt 是引用类型的吧
Cache["**"] 中存放的是 dt的引用
dt被回收了 通过引用Cache["**"]还能得到数据??
wangxingny 2012-09-29
  • 打赏
  • 举报
回复
Cache["**"] 这个跟 using没有关系。
using(datatable dt = **)
{

}

只是表示出了using结尾的}之后,这个dt就会被回收。
所以dt是不存在,而缓存是存在的。
qxyywy 2012-09-29
  • 打赏
  • 举报
回复
对象的作用域 难道你不清楚?

62,107

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧