第一节 接口慨述
接口(interface)用来定义一种程序的协定实现接口的类或者结构要与接口的定义严格一致有了这个协定就可以抛开编程语言的限制(理论上)接口可以从多个基接口继承而类或结构可以实现多个接口接口可以包含方法属性事件和索引器接口本身不提供它所定义的成员的实现接口只指定实现该接口的类或接口必须提供的成员
接口好比一种模版这种模版定义了对象必须实现的方法其目的就是让这些方法可以作为接口实例被引用接口不能被实例化类可以实现多个接口并且通过这些实现的接口被索引接口变量只能索引实现该接口的类的实例例子
interface IMyExample
{
string this[int index] { get ; set ;}
event EventHandler Even ;
void Find(int value) ;
string Point { get ; set ; }
}
public delegate void EventHandler(object sender Event e) ;
上面例子中的接口包含一个索引this一个事件Even一个方法Find和一个属性Point
接口可以支持多重继承就像在下例中接口IComboBox同时从ITextBox和IListBox继承
interface IControl
{
void Paint( ) ;
}
interface ITextBox: IControl
{
void SetText(string text) ;
}
interface IListBox: IControl
{
void SetItems(string[] items) ;
}
interface IComboBox: ITextBox IListBox { }
类和结构可以多重实例化接口就像在下例中类EditBox继承了类Control同时从IDataBound和IControl继承
interface IDataBound
{
void Bind(Binder b) ;
}
public class EditBox: Control IControl IDataBound
{
public void Paint( ) ;
public void Bind(Binder b) {}
}
在上面的代码中Paint方法从IControl接口而来Bind方法从IDataBound接口而来都以public的身份在EditBox类中实现
说明
C#中的接口是独立于类来定义的这与 C++模型是对立的在 C++中接口实际上就是抽象基类
接口和类都可以继承多个接口
而类可以继承一个基类接口根本不能继承类这种模型避免了 C++的多继承问题C++中不同基类中的实现可能出现沖突因此也不再需要诸如虚拟继承和显式作用域这类复杂机制C#的简化接口模型有助于加快应用程序的开发
一个接口定义一个只有抽象成员的引用类型C#中一个接口实际所做的仅仅只存在着方法标志但根本就没有执行代码这就暗示了不能实例化一个接口只能实例化一个派生自该接口的对象
接口可以定义方法属性和索引所以对比一个类接口的特殊性是当定义一个类时可以派生自多重接口而你只能可以从仅有的一个类派生
接口与组件
接口描述了组件对外提供的服务在组件和组件之间组件和客户之间都通过接口进行交互因此组件一旦发布它只能通过预先定义的接口来提供合理的一致的服务这种接口定义之间的稳定性使客户应用开发者能够构造出坚固的应用一个组件可以实现多个组件接口而一个特定的组件接口也可以被多个组件来实现
组件接口必须是能够自我描述的这意味着组件接口应该不依赖于具体的实现将实现和接口分离彻底消除了接口的使用者和接口的实现者之间的耦合关系增强了信息的封装程度同时这也要求组件接口必须使用一种与组件实现无关的语言目前组件接口的描述标准是IDL语言
由于接口是组件之间的协议因此组件的接口一旦被发布组件生产者就应该尽可能地保持接口不变任何对接口语法或语义上的改变都有可能造成现有组件与客户之间的联系遭到破坏
每个组件都是自主的有其独特的功能只能通过接口与外界通信当一个组件需要提供新的服务时可以通过增加新的接口来实现不会影响原接口已存在的客户而新的客户可以重新选择新的接口来获得服务
组件化程序设计
组件化程序设计方法继承并发展了面向对象的程序设计方法它把对象技术应用于系统设计对面向对象的程序设计的实现过程作了进一步的抽象我们可以把组件化程序设计方法用作构造系统的体系结构层次的方法并且可以使用面向对象的方法很方便地实现组件
组件化程序设计强调真正的软件可重用性和高度的互操作性它侧重于组件的产生和装配这两方面一起构成了组件化程序设计的核心组件的产生过程不仅仅是应用系统的需求组件市场本身也推动了组件的发展促进了软件厂商的交流与合作组件的装配使得软件产品可以采用类似于搭积木的方法快速地建立起来不仅可以缩短软件产品的开发周期同时也提高了系统的稳定性和可靠性
组件程序设计的方法有以下几个方面的特点
编程语言和开发环境的独立性
组件位置的透明性
组件的进程透明性
可扩充性
可重用性
具有强有力的基础设施
系统一级的公共服务
C#语言由于其许多优点十分适用于组件编程但这并不是说C#是一门组件编程语言也不是说C#提供了组件编程的工具我们已经多次指出组件应该具有与编程语言无关的特性请读者记住这一点组件模型是一种规范不管采用何种程序语言设计组件都必须遵守这一规范比如组装计算机的例子只要各个厂商为我们提供的配件规格接口符合统一的标准这些配件组合起来就能协同工作组件编程也是一样我们只是说利用C#语言进行组件编程将会给我们带来更大的方便
知道了什么是接口接下来就是怎样定义接口请看下一节定义接口
基于C#的接口基础教程之二
基于C#的接口基础教程之三
基于C#的接口基础教程之四
基于C#的接口基础教程之五
基于C#的接口基础教程之六