了解如何使用块处理对象
Understanding how using block dispose of objects
我有以下代码,我想在其中立即处理 ApplicationDbContext
个实例:
using (var context = ApplicationDbContext.Create())
{
MyRepository myRespository = new MyRepository(context);
myRepository.ReadData();
}
如果 C# 垃圾收集器想要立即处理 ApplicationDbContext
,它也必须立即处理 MyRepository
,因为它有对 ApplicationDbContext
的引用?这真的发生了吗?
或者我是否需要像下面这样编写我的代码以确保 ApplicationDbContext
立即被处置?
using (var context = ApplicationDbContext.Create())
using (MyRepository myRespository = new MyRepository(context))
{
myRepository.ReadData();
}
你的第二段代码是正确的。
一个 using 子句应用于一个声明。
你在这里写了什么:
using (var context = ApplicationDbContext.Create())
using (MyRepository myRespository = new MyRepository(context))
{
myRepository.ReadData();
}
等同于:
var context = ApplicationDbContext.Create();
try
{
var myRespository = new MyRepository(context);
try
{
myRepository.ReadData();
}
finally
{
myRepository.Dispose();
}
}
finally
{
context.Dispose();
}
这就是编译器为您生成的内容,因此您无需担心编写如此繁重且重复的内容,这可能是错误和错误的来源。
第一个代码中,myRespository
没有配置
我有以下代码,我想在其中立即处理 ApplicationDbContext
个实例:
using (var context = ApplicationDbContext.Create())
{
MyRepository myRespository = new MyRepository(context);
myRepository.ReadData();
}
如果 C# 垃圾收集器想要立即处理 ApplicationDbContext
,它也必须立即处理 MyRepository
,因为它有对 ApplicationDbContext
的引用?这真的发生了吗?
或者我是否需要像下面这样编写我的代码以确保 ApplicationDbContext
立即被处置?
using (var context = ApplicationDbContext.Create())
using (MyRepository myRespository = new MyRepository(context))
{
myRepository.ReadData();
}
你的第二段代码是正确的。
一个 using 子句应用于一个声明。
你在这里写了什么:
using (var context = ApplicationDbContext.Create())
using (MyRepository myRespository = new MyRepository(context))
{
myRepository.ReadData();
}
等同于:
var context = ApplicationDbContext.Create();
try
{
var myRespository = new MyRepository(context);
try
{
myRepository.ReadData();
}
finally
{
myRepository.Dispose();
}
}
finally
{
context.Dispose();
}
这就是编译器为您生成的内容,因此您无需担心编写如此繁重且重复的内容,这可能是错误和错误的来源。
第一个代码中,myRespository
没有配置