为什么要使用IDataReader而不是DbDataReader?

Pau*_*aul 1 .net c# ado.net

我在许多示例中看到了一种用法(IDataReader而不是DbDataReader使用其他ADO.NET接口而不是相应的类).

我知道这IDataReader是一个接口,DbDataReader是一个类,依此类推......我的问题不是关于接口如何与类不同.

IDataReader 描述了通用数据读取器的接口.

DbDataReader 也是通用的(但是抽象类).

他们的用法示例似乎是等效的.

为什么要使用通用数据读取器接口而不是使用通用数据读取器类?哪些情况只需要使用界面?哪些情况只需要使用课程?

一个典型的例子:

DbCommand cmd = conn.CreateCommand();
.....................
using (IDataReader reader = cmd.ExecuteReader())
{
    grid.DataSource = reader;
    grid.DataBind();
}
Run Code Online (Sandbox Code Playgroud)

D S*_*ley 6

DbDataReader 也是通用的

嗯,这是抽象的,但不是通用的.可能是一个语义的说法,但它是一个基类为不同的阅读器(SqlDataReader,OleDbDataReader等)

在抽象基类上使用接口的主要好处是,如果有人决定使用继承的数据读取器DbDataReader.

哪些情况只需要使用课程

总是创建具体的类 - 接口只是用来表示"我不关心具体类是什么,只要它遵循与这些方法/属性的契约".