久久久久久久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免费在线观看 | 国产成人综合一区二区三区 | 亚洲高清av在线 | 热re99久久精品国99热观看 | 在线伊人网 | 国产精品夜夜春夜夜爽久久电影 | 福利网站导航 | 九九久久精品 | 国产精品久久久久国产a级 欧美日韩国产免费 | 欧美日韩在线看 | 黄色免费网站在线看 | 污片在线免费观看 | 国产精品亚洲一区 | 成人在线观看免费 | 欧美一区二区网站 | 国产精品一区二区在线 | 国产欧美日韩一区二区三区在线 | 成人小视频在线观看 | 日韩欧美国产一区二区 | sese视频在线观看 | av喷水| 日韩成人av在线 | 国产精品自拍啪啪 | 在线观看免费福利 | 久久久91精品国产一区二区精品 | 91不卡在线 | 久久国产精品72免费观看 | 免费福利视频一区二区三区 | 黄色毛片在线看 | 福利一区在线观看 | 亚洲一区不卡在线 | 精品一区二区三区入口 | 中文欧美日韩 | 国产乱码精品一区二区三区五月婷 | 精品国偷自产在线 | 国产精品久久久久久久久久久久冷 | 久久一区二区三区四区 |