1樓:匿名使用者
using 語句(c# 參考)
提供能確保正確使用 idisposable 物件的方便語法。
就拿你這段**來說
using(oledbconnection connection = new oledbconnection(connectionstring))
可以看到,在**中,只開啟了資料庫連線,而沒有呼叫connection.close()
但是因為 using 會確保正確使用 idisposable,那麼,在跳出using的時候,connection.dispose() 就會被正確的呼叫,所以可以不用呼叫connection.close()。
另一種情況,就是異常,using也能保證確保正確使用 idisposable。
using(oledbconnection connection = new oledbconnection(connectionstring))
在這種情況下,using也能保證connection以被正確的釋放。
按照規則,當使用 idisposable 物件時,應在 using 語句中宣告和例項化此物件。using 語句按照正確的方式呼叫物件上的 dispose 方法,並(在您按照前面所示方式使用它時)會導致在呼叫 dispose 時物件自身處於範圍之外。在 using 塊中,物件是隻讀的並且無法進行修改或重新分配。
using 語句確保呼叫 dispose,即使在呼叫物件上的方法時發生異常也是如此。通過將物件放入 try 塊中,並在呼叫 finally 塊中的 dispose,可以獲得相同的結果;實際上,這就是編譯器轉換 using 語句的方式。
可以將多個物件與 using 語句一起使用,但必須在 using 語句中宣告這些物件,如以下示例所示:
using (font font3 = new font("arial", 10.0f),
font4 = new font("arial", 10.0f))
可以例項化資源物件,然後將變數傳遞給 using 語句,但這不是最佳做法。在這種情況下,該物件將在控制權離開 using 塊之後保持在範圍內,即使它可能將不再具有對其非託管資源的訪問權也是如此。換句話說,再也不能完全初始化該物件。
如果試圖在 using 塊外部使用該物件,則可能導致引發異常。由於這個原因,通常最好是在 using 語句中例項化該物件並將其範圍限制在 using 塊中。
font font2 = new font("arial", 10.0f);
using (font2) // not recommended
// font2 is still in scope
// but the method call throws an exception
float f = font2.getheight();
2樓:
定義一個範圍,在範圍結束時處理物件。
當在{}中使用了類的例項,而希望無論因為什麼原因,只要離開了}就自動呼叫這個類例項的dispose。
比如connection 在}後就直接銷燬了,而不是等待gc自動**
3樓:堵秋陽
這個語句是.net應用程式連線資料庫做的一個,你是那個面的using裡面的是一個資料庫連線的引擎啊 !
而使用是時候要 connection.close();
但是用using的話 就可以不用那個關閉連線,系統會自動釋放,自動給你關掉的;
4樓:
釋放using語句裡的資源,前提條件:using語句裡面必須可以釋放資源
c#裡的using語句是什麼意思
5樓:依嵐軟體
使用using語句最終生成的其實是一個try, finally**塊,在finally**塊裡釋放資源。要求是:為 using 語句提供的物件必須實現 idisposable 介面。
此介面提供了 dispose 方法,該方法將釋放此物件的資源。
你的問題其實可以這樣解釋:
在using中其實開啟了一個資料庫連線,然後從資料庫中讀取了某些資料,最後不管讀取是否成功,都應該把這個資料庫連線關閉掉。
傳統的寫法應該是在try塊裡開啟連線並且讀取,在finally塊中把連線關閉掉,而由於你的sdr物件實現了idisposable介面,所以c#允許你用using語句來代替這種寫法,其實這就是一種語法糖,一種簡便寫法而已。
當程式執行完這個**塊(超出大括號的範圍)後,sdr就會被自動關閉掉。
6樓:華華兮
就對於你上面這句話而言,因為資料庫open之後,最後一定要close,即在**最後寫conn.close();但是用了using語句後,當執行完using語句中的**,退出using語句時,close()方法會自動幫你執行,把資料庫連線關閉。方便了**的書寫和以免程式設計師忘記關掉資料庫連線。
7樓:匿名使用者
using 引入名稱空間或者使用非託管資源其中引入名稱空間通俗的說
就是我們程式中最頂部的**
如:using system;
樓主取的例子應該是使用非託管資源,
我們一般使用的是託管資源,不用後系統會自動釋放記憶體,而有些我們自己定義的非託管資源就需要我們手動的去釋放空間
8樓:匿名使用者
c# 程式設計師參考
using 語句請參見
c# 關鍵字 | using 指令 | 實現 finalize 和 dispose 以清理非託管資源
using 語句定義一個範圍,在此範圍的末尾將處理物件。
using (expression | type identifier = initializer) statement
其中:expression
希望在退出 using 語句時呼叫 dispose 的表示式。
type
identifier 的型別。
identifier
type 型別的名稱或識別符號。定義一個以上 type 型別的 identifier 是可以的。在每一個 identifier = initializer 的前邊都有一個逗號。
initializer
建立物件的表示式。
statement
嵌入的語句或要執行的語句。
備註在 using 語句中建立一個例項,確保退出 using 語句時在物件上呼叫 dispose。當到達 using 語句的末尾,或者如果在語句結束之前引發異常並且控制離開語句塊,都可以退出 using 語句。
例項化的物件必須實現 system.idisposable 介面。
9樓:匿名使用者
2樓找到資料對的,你要知道像檔案,資料庫連線這些是非託管資源.net不會自動去釋放他們,一般需要你手動關閉。當使用using時,如果物件實現了system.
idisposable介面,他就會在使用完釋放掉。
10樓:匿名使用者
相當於區域性變數,在{}的物件會自動釋放
不用呼叫相關的dispose()方法
關於c#中using的用法
11樓:200是我的
using 語句定義一個範圍,在此範圍的末尾將處理物件。
using (expression | type identifier = initializer) statement
其中:expression
希望在退出 using 語句時呼叫 dispose 的表示式。
type
identifier 的型別。
identifier
type 型別的名稱或識別符號。定義一個以上 type 型別的 identifier 是可以的。在每一個 identifier = initializer 的前邊都有一個逗號。
initializer
建立物件的表示式。
statement
嵌入的語句或要執行的語句。
備註在 using 語句中建立一個例項,確保退出 using 語句時在物件上呼叫 dispose。當到達 using 語句的末尾,或者如果在語句結束之前引發異常並且控制離開語句塊,都可以退出 using 語句。
例項化的物件必須實現 system.idisposable 介面。
示例// cs_using_statement.cs
// compile with /reference:system.drawing.dll
using system.drawing;
class a
// compiler will call dispose on myfont and myfont2
font myfont3 = new font("arial", 10.0f);
using (myfont3)
// compiler will call dispose on myfont3}}
12樓:匿名使用者
定義一個範圍,將在此範圍之外釋放一個或多個物件。
using 語句提供的物件必須實現 idisposable 介面
13樓:匿名使用者
回答者:200是我的 - 經理 五級 11正解
14樓:匿名使用者
讀檔案的資料流.具體的用法你上網找找吧!
15樓:幸玉芬愈戊
using語句,定義一個範圍,在範圍結束時處理物件。
場景:當在某個**段中使用了類的例項,而希望無論因為什麼原因,只要離開了這個**段就自動呼叫這個類例項的dispose。
要達到這樣的目的,用try...catch來捕捉異常也是可以的,但用using也很方便。
例如:using
(class1
cls1
=new
class1(),
cls2
=new
class1())
//call
thedispose
oncls1
andcls2
但是它不會自動釋放括號語句塊裡面的其它生成的物件所以在using
裡面的stream
reader
這兩個不會在執行到
using
外後自動釋放
net面試題:c#中的using語句有什麼作用
16樓:—邪影
1、using 匯入名稱空間
2、手動釋放在語句塊內的物件記憶體,儘管 clr有自動釋放機制,gc自動**,但這並不是確定性的,所以你需要更精準的釋放,就使用using公
求SQL語句,求一個SQL語句
select from table name where 部門 工程部 and 經理簽字 0 and 行政簽字 0 and 結單 0 union all select from table name where 部門 工程部 and 經理簽字 1 and 行政簽字 0 and 結單 0 select...
sql語句求大神幫助,SQL查詢語句,求大神幫助!
大概明白你的意思。如果你的資料只有三層,並且只是你sql限定的這些資料好辦。select t3.mc,t2.mc t1.mc,t1.from select from sys zdinfo where plsh 2012070900000068 and plsh 2012070900000072 t1...
急求SQL語句方法,急求SQL語句方法
select convert char 2 month 訪問時間 convert char 2 day 訪問時間 的訪問量 convert char 10 count id 次的訪問量 from 表名 where 訪問時間 dateadd month,1,getdate group by 訪問時間 ...