久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

處理時不帶變量的 using 語句有什么作用?

what does a using statement without variable do when disposing?(處理時不帶變量的 using 語句有什么作用?)
本文介紹了處理時不帶變量的 using 語句有什么作用?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我一直使用 with 變量和賦值.現在我有這樣一個 DbProviderConnection 類:

I've always used using with variable and assignment. Now i have like this a class 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
}

現在我想像這樣使用它:

Now i was thinkin to use it like this:

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

我的問題是:DbProviderConnection.Transaction.Dispose 被調用了嗎?

My question is: Is the DbProviderConnection.Transaction.Dispose called?

推薦答案

來自 C# 規范 8.13 using 定義為

From C# Specification 8.13 using statement defined as

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

資源獲取在哪里

resource-acquisition:
    local-variable-declaration
    expression

在第一種情況下,您使用 which 通過局部變量聲明獲取資源.在第二種情況下,資源是通過表達式獲取的.因此,在第二種情況下,資源將是 cnctn.BeginTransaction() 調用的結果,它是來自您的 DbProviderConnection 類的 DbTransaction.using 語句在使用后處理其資源.所以,是的,DbProviderConnection.Transaction.Dispose() 將被調用.

In first case you have using which acquires resource via local variable declaration. In second case resource is acquired via expression. So, in second case resouce will be result of cnctn.BeginTransaction() call, which is DbTransaction from your DbProviderConnection class. Using statement disposes its resource after usage. So, yes, DbProviderConnection.Transaction.Dispose() will be called.

更新:根據同一篇文章,您的第二個 using 塊將被翻譯為

UPDATE: According to same article, your second using block will be translated to

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

這篇關于處理時不帶變量的 using 語句有什么作用?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

LINQ to SQL and Concurrency Issues(LINQ to SQL 和并發問題)
Yield return from a try/catch block(try/catch 塊的收益回報)
Should I call Parameters.Clear when reusing a SqlCommand with a transation?(重用帶有事務的 SqlCommand 時,我應該調用 Parameters.Clear 嗎?)
Does SqlTransaction need to have Dispose called?(SqlTransaction 是否需要調用 Dispose?)
Reason for System.Transactions.TransactionInDoubtException(System.Transactions.TransactionInDoubtException 的原因)
How do I use TransactionScope with MySql and Entity Framework? (getting Multiple simultaneous connections...are not currently supported error)(如何將 TransactionScope 與 MySql 和實體框架一起使用?(獲取多個同時連接...目前不
主站蜘蛛池模板: 国产精品欧美在线 | 色老板免费视频 | av黄色在线观看 | 91色交视频 | 97av在线视频 | 国产一区二区不卡 | 欧美日韩国产中文 | 成年在线观看 | 美女免费视频网站 | 国产日韩综合 | 精品国产乱码一区二区三 | 黄色片在线看 | 日韩av在线免费 | 国产成人在线播放 | 97免费在线| 在线观看日韩精品 | 在线观看黄色片 | 69精品视频| 超碰在线网站 | 看一级黄色片 | 8x8ⅹ国产精品一区二区 | 国产一区二区自拍 | 欧美精品日韩 | 日韩精品福利 | av一二三 | 日韩在线高清 | 91成人在线观看喷潮蘑菇 | 国产伦精品一区二区三毛 | 免费av观看 | 欧美精品日韩 | 亚洲 欧美 激情 另类 校园 | 国产视频一区在线 | 日韩色黄大片 | 影音先锋国产精品 | 成年人免费看视频 | 亚洲国产中文字幕 | 久久国产一区二区三区 | 欧美日韩在线精品 | 国产一级特黄aaa大片 | 亚洲第一免费视频 | 91精品国产乱码久久久 |