方法返回一个接口

大家好,

我正在考虑这行代码

IDataReader myReader = questDatabase.ExecuteReader(getQuest); 

我正在使用DAAB,但我无法理解方法ExecuteReader(DbCommand)返回IDataReader接口的意义和含义是什么。

任何人都可以解释,拜托

它允许您使用DataReader而无需知道您正在使用哪种类型的DataReader(即SqlDataReader, OleDbDataReader, EtcDataReader ),因此如果有一天您想要更改使用它的datareader将不会影响您的逻辑,换句话说它给你抽象。 例如 :

您可以使用

 IDbCommand command = GiveMeSomeCommand(); IDataReader r = command.ExecuteReader(); 

不知道您正在使用哪个提供商

有可能:

 private static IDbCommand GiveMeSomeCommand() { return new OleDbCommand(); } 

或者它可以

 private static IDbCommand GiveMeSomeCommand() { return new SqlCommand(); } 

管他呢。

编辑:

您也可以使用DBFactories。

 DbProviderFactory factory = GiveMeSomeFactory(); IDbCommand command = factory.CreateCommand(); IDataReader r = command.ExecuteReader(); //and create more objects IDataAdapter adapter = factory.CreateDataAdapter(); IDbConnection conn = factory.CreateConnection(); 

然后在其他层创建您的提供程序

 private DbProviderFactory GiveMeSomeFactory() { if(something) return SqlClientFactory.Instance; else if(somethingElse) return OracleFactory.Instance; else if(notThisAndNotThat) return MySqlFactory.Instance; else return WhateverFactory.Instance; } 

该方法将返回一个对象,该对象是一个类的实例,该类的类将支持IDataReader

关键是,对象的类型并不重要,只是该类实现了接口。

如果你正在开车,你不需要知道它是福特,还是丰田,你也可以用同样的方式驾驶汽车。

驱动界面是一样的,一旦汽车支持界面,你就可以开车了。

IDataReader同上,一旦返回的类支持该接口,您就可以使用它。

它返回一个接口,因为接口的实现并不重要,只是接口提供的API。

“返回一个接口”真的意味着:

返回实现该接口的某个类的实例

在这种情况下,它返回一个非常类似于SqlDataReader对象的对象,它允许您执行Read()类的方法并实现IDisposableIDataRecord接口。

它不是返回一个接口本身,而是一个支持该接口的对象。

它返回一个实现这个特定接口的对象,这就是你真正关心的。 该对象是一个IDataReader ,可以执行IDataReader具有的所有方法。