gpt4 book ai didi

c# - 处置时不带变量的 using 语句有何作用?

转载 作者:IT王子 更新时间:2023-10-29 04:34:45 26 4
gpt4 key购买 nike

我一直使用 using with 变量和赋值。现在我有这样一个 DbProviderConnection 类:

public class DbProviderConnection : IDisposable
{
public DbConnection Connection { get; set; }
public DbTransaction Transaction { get; set; }

public DbTransaction BeginTransaction()
{
Transaction = Connection.BeginTransaction();
return Transaction;
}

//... and so on
}

现在我想像这样使用它:

using (DbProviderConnection cnctn = _planDb.CreateOpenConnection())
{
using (cnctn.BeginTransaction())
{
//...
cnctn.Transaction.Commit();
}
}

我的问题是:是否调用了 DbProviderConnection.Transaction.Dispose

最佳答案

来自 C# Specification 8.13 using 语句定义为

using-statement:
using (resource-acquisition) embedded-statement

资源获取在哪里

resource-acquisition:
local-variable-declaration
expression

在第一种情况下,您使用 which 通过局部变量声明获取资源。在第二种情况下,资源是通过表达式获取的。因此,在第二种情况下,资源将是 cnctn.BeginTransaction() 调用的结果,它是 DbProviderConnection 类中的 DbTransaction。使用语句在使用后处理其资源。所以,是的,将调用 DbProviderConnection.Transaction.Dispose()

更新:根据同一篇文章,您的第二个 using block 将被翻译成

DbTransaction resource = cnctn.BeginTransaction();
try
{
//...
cnctn.Transaction.Commit();
}
finally
{
if (resource != null)
((IDisposable)resource).Dispose();
}

关于c# - 处置时不带变量的 using 语句有何作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21988358/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com