IDictionary接口的需求是什么?如何初始化IDictionary接口。毕竟,它只是一个接口。下面的代码片段来自msdn。我无法理解它。
IDictionary<string, string> openWith = new Dictionary<string, string>();发布于 2009-05-22 06:42:08
它定义了字典应该实现的重要functions。
MSDN中的这一行表示您正在创建一个对象openWith,它实现了在IDictionary接口中定义的函数(方法)。
在使用Dictionary声明变量时,如下所示:
Dictionary<string,string> openWith=.....;您正在与具体类型的对象绑定。但是当你使用
IDictionary<string,string> openWith=....;您可以将它与实现IDictionary接口的任何对象一起使用,可能是您自己的自定义类:)
发布于 2009-05-22 06:44:12
接口的全部意义在于提供...任何模块的接口(我在这里使用的是广义的“模块”),这样调用代码就不必担心这个特定接口是如何实现的。
至于“如何初始化IDictionary接口”,这在技术上是不正确的。可以初始化的是一个变量,其类型为IDictionary<T, V>。当然,必须初始化变量,但这通常对“客户端代码”是隐藏的。
然而,IDictionary并不是很有代表性。相反,考虑一个IDataReader接口。您肯定已经处理过ADO.NET,所以这看起来应该很眼熟:
public Foo PopulateFromDataReader(SqlDataReader dataReader)此特定方法与SqlDataReader紧密耦合,因此您必须重写它才能支持Access、Oracle、MySQL或Firebird等。换句话说,你依赖于实现。
现在考虑一下:
public Foo PopulateFromDataReader(IDataReader dataReader)此方法可以与实现IDataReader的任何类一起使用,这意味着基本上可以与任何与ADO. data兼容的数据提供程序一起使用。
发布于 2009-05-22 06:46:32
它与任何其他接口没有什么不同。试着想一个更简单的例子:
interface IThermometer
{
double CurrentTemperature { get; }
}现在我们有了一种获得温度的方法,尽管我们并不关心它是如何测量的。我们可以创建各种实现:
class MercuryThermometer : IThermometer
{
public double CurrentTemperature
{
get { return ... /* gets the temperature somehow */ }
}
}程序的其余部分不需要知道它使用的是哪个温度计。
https://stackoverflow.com/questions/896611
复制相似问题