我知道IDataReader
是一个接口,因此我无法创建接口实例。
但是,可以获取IdataReader
。
这怎么可能?
答案 0 :(得分:4)
您无法创建接口的实例。但是您可以创建实现接口的类的实例。如果IDataReader
SqlDataReader
是一种实现方式。
您通过executing a SqlCommand获得了一个实例:
SqlDataReader reader = command.ExecuteReader();
例如(来自MSDN):
string queryString =
"SELECT OrderID, CustomerID FROM dbo.Orders;";
using (SqlConnection connection =
new SqlConnection(connectionString))
{
SqlCommand command =
new SqlCommand(queryString, connection);
connection.Open();
// here is your SqlDataReader that implements IDataReader
SqlDataReader reader = command.ExecuteReader();
// Call Read before accessing data.
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}",
reader[0], reader[1]));
}
// Call Close when done reading.
reader.Close();
}
修改强>:
我假设您不明白为什么可能有一个具有接口类型的实例。这并不矛盾,因为接口实际上是一种类型。
因此,如果我要创建一个实现MyDataReader
的类IDataReader
,那么我的类的实例将是MyDataReader
类型以及IDataReader
。
如果有人创建MyDataReader
的实例,他知道它也实现了IDataReader
的所有方法。这对Polymorphism非常重要。
答案 1 :(得分:0)
我不知道你想要的意思。
you mean a concrete instance of a DataReader-derived class,
such as SqlDataReader
IDataReader在查询上下文之外没有任何意义,
所以通过ExecuteReader函数通过查询实例化它是很自然的。 您可能想问自己一个问题:为什么我要实例化IDataReader?如果可以 - 我将如何初始化它?