我们在类名前使用抽象关键字来限制创建类的实例。但是,Datareader不是一个抽象类,但我们也无法创建它的实例。你能解释一下为什么吗?
我进行了搜索后发现,这是因为它没有构造函数,所以我们不能创建对象。但据我所知,如果没有构造函数,则编译器会自动创建一个默认构造函数。
请帮忙确认一下。
我进行了搜索后发现,这是因为它没有构造函数,所以我们不能创建对象。但据我所知,如果没有构造函数,则编译器会自动创建一个默认构造函数。
请帮忙确认一下。
DbDataReader
是一个抽象类。如果你的意思是 SqlDataReader
,它没有公共构造函数,所以你不能创建一个实例。它只有一个 internal
构造函数(ILSpy):
// System.Data.SqlClient.SqlDataReader
internal SqlDataReader(SqlCommand command, CommandBehavior behavior)
{
// ...
}
来自 MSDN:
要创建
SqlDataReader
,您必须调用 SqlCommand 对象的ExecuteReader
方法,而不是直接使用构造函数。
通常最好避免实例化 DataReader
,因为它只能通过 SqlCommand.ExecuteReader
创建。
DataReader
是一个好主意的原因是什么? - Michael Haddad只需创建自己的类,实现DbDataReader
并覆盖方法即可。
public class InMemoryDbReader: DbDataReader
{
...
}