8.2OOP技术 [Object-Oriented Programming面向对象编程]
8.2.1接口
接口是把公共方法和属性组合起来,以封装特定功能的一个集合。一旦定义了接口,就可以在类中实现它。这样,类就可以支持接口所指定的所有属性和成员。
注意,接口不能单独存在。不能像实例化一个类那样实例化接口。另外,接口不能包含实现其成员的任何代码,而只能定义成员本身。实现过程必须在实现接口的类中实现。
接口的名称一般用大写字母I开头,然后就可以在其他对象上使用该接口。对象仍保有自己的属性
一个类可以支持多个接口,多个类也可以支持相同的接口。所以接口的概念让用户和其他开发人员更容易理解其他人的代码。例如,有一些代码使用一个带某接口的对象。假定不使用这个对象的其他属性和方法,就可以用另一个对象代替这个对象。另外,该对象的开发人员可以提供该对象的更新版本,只要它支持已经在用的接口,就可以在代码中使用这个新版本。
接口在发布后,即使接口可以用于其他人员或终端用户后,最好不要修改它。理解这一点的一种方式是把接口看做类的创建者和使用者之间的契约。"每个支持接口X的类都支持这些方法和属性"是有效的。如果以后修改了接口,也许是升级了底层的代码,该接口的使用者就不能正确运行接口,甚至失败。我们应创建一个新的接口,来扩展旧接口,例如包含一个版本号,如X2.这是创建接口的标准方式,以后我们会常常遇到编了号的接口。
可删除的对象
IDisposable接口特别有趣。支持IDisposable接口的对象必须实现其Dispose()方法,即它们必须提供这个方法的代码。当不再需要某个对象(例如,在对象超出作用域之前)时,就调用这个方法,释放重要的资源。否则,该资源会等到对垃圾回收调用析构方法时才释放。这样可以更好地控制对象所使用的资源。
C#允许使用一种可以优化使用这个方法的结构。Using关键字可以在代码块中初始化使用重要资源的对象,Dispose()方法会在这个代码块的末尾自动调用,用法如下:
第一种:
类名 变量名=new 类名();
using(变量名)
{}
第二种,把初始化对象变量名作为using语句的一部分
using(类名 变量名=new 类名())
{
}
在这两种情况下,变量可以在using代码块中使用,并在代码块的末尾自动删除(在代码块执行完毕后,调用Dispose())。
C#中接口作为返回值
interface Iinteface{}
class A:Iinterface{}
class B:Iinterface{}
class C:Iinterface{}
A、B、C继承接口Iinterface
返回值为接口,正是OOP的体现。//Object Oriented Programming面向对象编程
Iinterface i=new A();//或B、C等都可以
因为A、B、C都继承自接口Iinterface,A、B、C的实例是Iinterface类型。
继承接口而不是继承类,便于相同的方法签名在不同的子类中进行不同的实现。
面向对象中一个重要的解耦合方法就是使用接口编程,高层模块和低层模块都要依赖抽象(或接口)。
这是原因...
至于意思...就是返回结果只要具有该接口即可,也就是说符合该契约就行不必去管它的具体类型...谓之解耦...
接口作为返回值,不是说你的方法就是返回那个接口,这是无意义的!
实际上s是,返回实现了这个接口的任意的类。 //因为类可以继承接口,所以实际应用当中,返回的是实现了该接口的类