2017-03-21 40 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方法。 –

相关问题