2011-08-03 61 views
5

這基本上是一個教程的問題要問,因爲我是新手,我想是我們用在我們的C#代碼開始,包括裝配和命名空間C#中的using語句和指令有什麼區別?

這樣using語句之間的差異:

using System.Web.Services; 

當我們在代碼內寫入代碼或方法時。 這樣的:

using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) 

有什麼不同,或者它們兩者是相同的,任何指導將是有益的和讚賞。

+2

令人驚訝的是很難找到這個問題的重複。 – BoltClock

+1

第一個是['using'指令](http://msdn.microsoft.com/en-us/library/sf0df423.aspx),允許您在不使用完全限定名的情況下訪問特定命名空間中定義的類型。第二個是['using'語句](http://msdn.microsoft.com/en-us/library/yh598w02.aspx),允許您輕鬆處理一次性對象。 –

+0

注意'using namespace'是一個「using directive」而不是一個語句。當你從初學者轉向並對精確定義感興趣時(例如在語言規範中),這會有所不同。 – Richard

回答

10

first (Using Directive)將使命名空間進入範圍。

這是例如,這樣就可以寫

StringBuilder MyStringBuilder = new StringBuilder(); 

而非

System.Text.StringBuilder MyStringBuilder = new System.Text.StringBuilder(); 

second (Using Statement)一個用於正確地使用(創建和處置)實現IDisposable接口的對象。

例如:

using (Font font1 = new Font("Arial", 10.0f)) 
{ 
    byte charset = font1.GdiCharSet; 
} 

這裏,Font類型實現IDisposable,因爲它使用unmanaged resources需要被correctly disposed of當我們使用Font實例(font1)沒有更長的時間。

+0

非常感謝! – abhijit

+1

無需感謝,接受一個答案是感謝在這個網站上足夠。 :) –

+0

當不同的命名空間中存在多個具有相同名稱的'class'或'interface'時,'using'也用於顯式使用'class'或'interface'。像'mynamespace.TimeZone'舉例來說,如果你使用的是'namespace'框架的'TimeZone'也'mynamespace',你需要使用'TimeZone'對象,那麼你需要做的'使用時區= mynamespace.TimeZone' – Luiso

2

using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))

此使用處置適配器對象自動一旦控制離開使用塊。

這相當於通話

SqlDataAdapter adapter = new SqlDataAdapter(cmd) 
adapter.dispose(); 

見本官方文檔: http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.71).aspx

+0

這不是直接等價的。更多的等價物將會是try/finally的使用。 –

+0

不,這相當於:try {SqlDataAdapter adapter = new SqlDataAdapter(cmd); } finally {adapter.dispose(); } – Falanwe

+0

它是一個大寫字母「Dispose」。 – BoltClock

0

他們對不同的,你可以得到。

第一個顯示意圖使用命名空間內的東西。

第二花費的一次性對象的引用,並確保其設置,無論發生什麼事情(如執行的try /終於)

0

我確定有人會花很多時間回答Google搜索的相關內容,但這裏有幾個鏈接可幫助您入門。

using Statement (C# Reference)確保即使在調用對象的方法時發生異常,也會調用Dispose。

要允許在名稱空間中使用類型,以便您不必限定該名稱空間中使用的類型,請使用using Directive (C# Reference)

您可能會發現MSDN是花費一些時間瀏覽的好資源。

相關問題