以SqlBulkCopy.WriteToServer()方法为例.其中一个重载采用IDataReader作为参数.我的问题是,将接口传递给方法而不是对象实例本身有什么好处/好处?
Bro*_*ass 10
您可以为该一个接口提供许多可能的实现.它更好地依赖于抽象(在这种情况下是接口)而不是实际的具体类 - 这允许更好的灵活性和可测试性.
这也将重点放在WriteToServer()方法真正需要的内容上- 它的契约唯一需要的是调用者传递一个提供接口声明的方法/属性的具体类的任何实例IDataReader.
传递接口意味着您可以传递实现该接口的任何对象而不仅仅是一个特定对象.
这使得代码更加灵活,因为它不必知道现在或将来可能实现接口的所有可能对象.
它还使其更加健壮,因为它只需要处理众所周知和定义的接口上的属性和方法.
形式参数类型是接口类型 - 这意味着您可以传入实现此接口的任何对象(或者更确切地说,是实现接口的对象的实例).
您没有传入接口,而是传入符合接口定义的协定的对象.
因此,如果您的数据源是SQL Server,那么您将传递一个SqlDataReader(如果是Oracle)OracleDataReader.
您还可以实现自己的数据读取器并将其传递给函数,甚至可以编写模拟数据读取器来彻底测试该方法.
这是一个众所周知的设计原则 - 程序到接口,而不是实现.
从MSDN - 何时使用接口:
接口是一种功能强大的编程工具,因为它们允许您将对象的定义与其实现分开.