深入理解C#之接口

这篇文章主要介绍了C#接口(Interface)用法,较为详细的分析了C#中接口的功能、实现及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

C#之接口

在编程中,我们经常会用到接口,那什么是接口呢?

接口描述的是可属于任何类或结构的一组相关功能,所以实现接口的类或结构必须实现接口定义中指定的接口成员。

接口使用interface 关键字进行定义,可由方法属性事件索引器或这四种成员类型的任意组合构成。

接口的特性:

1.接口类似于抽象基类,不能直接实例化接口;接口中的方法都是抽象方法,实现接口的任何非抽象类型都必须实现接口的所有

成员。

当显式实现该接口的成员时,实现的成员不能通过类实例访问,只能通过接口实例访问。

当隐式实现该接口的成员时,实现的成员可以通过类实例访问,也可以通过接口实例访问,但是实现的成员必须是公有的。

2.接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型、不能包含静态成员。

3.接口成员是自动公开的,且不能包含任何访问修饰符。

4.接口自身可从多个接口继承,类和结构可继承多个接口,但接口不能继承类。

为什么不能指定接口中方法的修饰符?

接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义。它们默认为公有方法。


   interface IProgram  
  {     
       void Fun();  
  }   
   class Program:IProgram  
  {    
     //显式实现接口成员        
     void IProgram.Fun()     
     {        
           Console.WriteLine("I am Fun.");    
    }     
     staticvoid Main(string[] args)    
    {    
          IProgram p =new Program(); 
     //声明一个接口实例,但不是对接口进行实例化            
     p.Fun();        
     Console.Read();    
    }    
}

上面提到,实现接口可以显式实现和隐式实现,那么这两种实现到底有什么优缺点呢?

一般情况,当类或者结构要实现的是单个接口,可以使用隐式实现。

如果类或者结构继承了多个接口且接口中具有相同名称成员时,就要用到显式实现,当显式实现方式存在时,隐式实现方式就失效了。


interface IProgram
    {
        void Fun();
    }
    interface IAProgram
    {
        void Fun();
    }
    class Program : IProgram, IAProgram
    {
        void IProgram.Fun()  //显式实现接口IProgram
        {
            Console.WriteLine("I am IProgram Fun.");
        }
        void IAProgram.Fun()  //显式实现接口IAProgram
        {
            Console.WriteLine("I am IAProgram Fun.");
        }
        //public void Fun()   //隐式实现接口
        //{
        //    Console.WriteLine("I am Program Fun.");
        /

本文标题为:深入理解C#之接口

基础教程推荐