2014-02-07 83 views
4

我们在classname之前使用abstract关键字来限制创建类的实例。为什么Datareader无法初始化?

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

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

请帮助...

+2

通常*你*不创建读者;你要求一个命令为你做*。你试图做什么? –

回答

4

DbDataReader是一个抽象类。如果你的意思是SqlDataReader,它没有公共构造函数,这就是为什么你不能创建一个实例。它只有一个internal构造(ILSpy):

// System.Data.SqlClient.SqlDataReader 
internal SqlDataReader(SqlCommand command, CommandBehavior behavior) 
{ 
    // ... 
} 

MSDN

要创建SqlDataReader,你必须通话 SqlCommand对象的ExecuteReader方法,而不是直接使用构造函数。

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

+1

我们可以这样做'System.Data.Common.DbDataReader reader = new System.Data.SqlClient.SqlDataReader();'即使sqlreader没有公共构造函数,但有默认的构造函数 –

+1

@PranayRana:你试过编译?没有默认的构造函数,只是一个静态构造函数和我已经提到的内部构造函数。 –

+0

IT编译时间错误,谢谢帮我理解这个... \ –

相关问题