接口的定义


<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>
    
 
组件编程技术
 
组件
把庞大的应用程序分割成多个模块,每个模块完成独立的功能,模块之间协同工作,这样的模块叫组件.
 
接口
接口描述了组件对外提供的服务.在组件和组件,组件和客户之间都是通过接口进行交互,组件接口一旦发布,就尽量不要再修改接口,任何对接口修改的改变都有可能造成组件与客户的联系遭到破坏.
 
 
                            接口定义
 
从技术上讲,接口是一组包含了函数型方法的数据结构 . 通过这组数据结构,可以代码可以调用组件对象的功能.
 
接口的定义可以使用以下修饰符
New ,public,private,protected,internal
在接口定义时同一修饰符不能出现多次,new 修饰符只出现在嵌套接口中,表示覆盖了继承而来的成员名 .
 
在接口的声明中可以定义接口的成员,接口成员可以是,方法,属性,索引指示器,事件.
     interface IControl
     {
         void Pain();
     }
声明了一个接口IControl,定义了一个成员方法Pain
 
接口的继承
 
接口具有不变性,但不意味着接口不再发展,类似于类的继承性,接口也可以继承和发展
值得注意的是,接口的继承和类的继承不一样.
1, 类的继承不仅是说明继承,而且是实现继承,而接口继承只是说明继承,也就是说,派生类可以继承基类的方法实现,而派生类的接口只继承了父接口的成员方法说明,而没有继承父接口的实现
2,C# 只允许类单继承,但接口允许多继承,一个子接口可以有多个父接口
 
被继承的接口必须是可以访问的到的,接口不允许直接或间接的从自身继承 
interface  IControl
    {
        
void  Pain();
    }
    
interface  TextBox:IControl
    {
        
void  SetText( string  text);
    }
    
interface  IComboBox:IControl,TextBox
    {}
 
接口IComboBox同时从IControl,TextBox中继承,多继承用逗号分割
 
接口成员
 
接口可以定义一个或多个成员,这些成员可以是方法,属性,索引指示器,事件,但不能是常量,域,操作符,构造函数,析构函数,而且不能包含任何静态成员
接口成员的默认访问方式是public,接口成员声明不能包含任何修饰符,接口可以声明与继承而来的成员名字相同的成员,这样就直接覆盖了继承的成员,如果在声明时不加NEW则编译器会报错
 
对接口成员的访问
 
接口成员访问与类的访问一致,但由于支持多继承,会发生出现两个同名的父继承成员,产生二义性,这是需要显示的进行声明.
 
 
interface ISequence
     {
         int Count
         {
              get;set;
         }
     }
     interface IRing
     {
         void Count(int i);
     }
     interface IRingSequence:ISequence,IRing{}
     class c
     {
         void test(IRingSequence rs)
         {   
              ((IRing)rs).Count(1);
              ((ISequence)rs).Count=1;
         }
     }
 
 
类C的方法test要访问接口IRingSequence的成员,必须先声明一个此接口的变量,然后显示指定具体继承的父属性的成员.
 
使用接口全名进行访问
直接用接口名.成员名进行访问,如果在命名空间内还需要包含命名空间名 , 例如
IControl.count;
Namespace.IControl.count
全名中的成员必须是在接口中声明过的,不能用继承而来的

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值