久久久久久久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 和實體框架一起使用?(獲取多個同時連接...目前不
主站蜘蛛池模板: 国产1区2区在线观看 | 国产午夜精品久久久 | 成人高潮片免费视频欧美 | 亚洲日韩中文字幕一区 | 99在线播放 | 精品1区2区3区4区 | 视频在线h | 欧美激情亚洲激情 | 久久久国产视频 | 91久久国产综合久久91精品网站 | 亚洲精品日韩一区二区电影 | 欧美中文字幕一区二区 | 成人二区 | 亚洲福利在线视频 | 久久免费高清 | 成人亚洲网 | 国产精品视频在线观看 | 国产精品免费小视频 | 久久久精选 | 337p日本欧洲亚洲大胆精蜜臀 | 羞羞网站在线观看 | 国产免费拔擦拔擦8x高清 | 婷婷丁香综合网 | 国产精品jizz在线观看老狼 | 国产免费观看久久黄av片涩av | 亚洲在线日韩 | 成人午夜高清 | 国产日韩精品在线 | 91久久国产综合久久 | 久久在线看| 可以在线观看av的网站 | 一区二区视频 | av一区在线观看 | 国产成人99久久亚洲综合精品 | 亚洲天堂男人的天堂 | 国产成人99久久亚洲综合精品 | 日本不卡一区二区三区 | 中文字幕在线欧美 | 欧美色综合天天久久综合精品 | 午夜小视频在线播放 | 日韩三级在线 |