2017-03-21 54 views
-3

我在該數據庫連接對象,如SqlConnecion,DataReader的等在使用C++實現的類,並且非託管代碼類型,這使得它們能夠被人工處理了許多文章閱讀。爲什麼在c#中而不是C++中實現IDataReader類?

那麼,爲什麼不能將這些類的實現在C#本身這樣做,他們將通過CLR管理或沒有任何理由,我們可以做到這一點使用C#?

+2

你確定嗎?它聞起來像一個謊言... – xanatos

+0

你問一個加載的問題。是什麼讓你認爲我們*不能在C#中寫這樣的東西? – Amy

+3

這是[的SqlConnection(https://github.com/Microsoft/referencesource/blob/master/System.Data/System/Data/SqlClient/SqlConnection.cs) – xanatos

回答

1

.NET基本上將原生Win32 API與.NET類(如SqlConnecionDataReader)包裝在一起,這使得您可以更輕鬆地使用這些API:而無需親自編寫非託管代碼。當然,還有一些非託管代碼可以在某處訪問文件系統。 CLR本身沒有在C#中實現。

+0

那麼,爲什麼不能管理非託管資源呢? –

+0

因爲CLR和垃圾收集器不知道任何有關非託管資源(如打開文件和網絡連接)的信息。它僅向託管代碼提供服務。 – mm8

+0

讓我們考慮他們是否正在使用FileStream類,並且正在使用using(){}或close()調用close方法關閉它。如果他們在類方法本身中使用它之後關閉FileStream,而不是在其中創建一個close方法。 –

相關問題