为什么Datareader无法初始化?

Joh*_*ohn 4 .net c# ado.net

我们在classname之前使用abstract关键字来限制创建类的实例.

但是datareader不是一个抽象类,但我们不能创建它的实例.你可以解释为什么吗?

我搜索了它然后我发现它没有构造函数,这就是为什么我们不能创建对象,但据我所知,如果没有构造函数,那么编译器自动创建一个默认的构造函数.

请帮忙...

Tim*_*ter 6

DbDataReader是一个抽象类.如果你的意思是SqlDataReader,它没有公共构造函数,这就是你无法创建实例的原因.它只有一个internal构造函数(ILSpy):

// System.Data.SqlClient.SqlDataReader
internal SqlDataReader(SqlCommand command, CommandBehavior behavior)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

来自MSDN:

要创建一个SqlDataReader,必须调用ExecuteReaderSqlCommand对象的方法,而不是直接使用构造函数.

一般来说,避免实例化是一个好主意,DataReader因为它只需要通过它来创建SqlCommand.ExecuteReader.

  • @PranayRana:您是否尝试过编译?没有默认构造函数,只有静态构造函数和我已经提到的内部构造函数。 (2认同)