微信号:quweiCSharp

介绍:专注于CSharp编程,.Net社区,.Net跨平台.

CSharp拾遗之接口、索引器的本质(学习笔记)

2016-05-10 08:56 王哲


接口

什么是接口?

      接口代表一种能力,和抽象类类似但比抽象类的抽象程度更高!

接口的定义:

  1 public interface IEat//定义一个接口  
 2
{  
 3
void Eat(string food);//为该接口定义一种能力  
 4
}

       从上边的例子中我们可以看到,接口中的方法是没有方法体的甚至连访问修饰符都没有。而且在接口中只能有方法、属性、索引器及事件!

 

接口的使用:

public class

 Dog:IEat //Dog类实现IEat接口

{

   //Dog类实现IEat接口的Eat方法

   public void Eat(string food)

   {

        Console.WriteLine("吃"+food);

   }

}


接口的使用

注意:如果一个类实现了一个接口则该类必须实现该接口及其父接口的所用方法除非该类是一个抽象类则交由该类的子类来实现!一个接口也可以继承另一个接口而不实现该接口的方法而是交由其实现者来实现

Demo:

//接口一

public Interface IEat

{

    void Eat();

}

//接口二

public Interface Ipaly

{

    void Play();

}

//接口三

public Interface Itravel:IEat,Ipaly

{

      //接口三继承接口一和接口二

}


public class program:Itravel

{

   public void Eat()

   {

      //省略方法体

   }

   public void Play()

      {

            //省略方法体

       }

}

从上面的demo中一些可以看到Itravel接口继承的IEat接口和Ipaly接口可能有些朋友要问了”在C#以及JAVA中不是不支持多继承吗?”

注意这句活是针对类而言的,但针对接口来说一个类是可以实现多个接口的同样一个接口也可以继承多个接口

接口和抽象类的区别:

当需要的各个对象之间存在父子类关系时,可以考虑使用抽象类,

当各个对象之间不存在继承关系,只是有相同的能力时,而已考虑使用接口

抽象类是某一类事物的抽象结果而接口则代表某些事物的一种能力

接口的注意点:

01.接口就是为了约束方法的格式(参数和返回值类型)而存在的

02.接口可以实现多继承,弥补单继承的缺陷。

03.接口可以看成是一个特殊的抽象类,通过反编译看源码可知

04.接口中方法不用访问修饰符,因为CLR会自动添加,并且不能有方法体

05.如果一个类实现了某个接口,就得实现该接口中所有的方法

06.接口要谨慎使用,防止出现接口污染!

07.接口仅仅代表一种能力,实现该接口的类和接口没有继承关系

08.接口是用来实现的,类是用来继承的。

09.其实很多时候,看似可以不用接口,因为接口就是一个方法的约定,

10.抽象类也可以实现接口,但接口成员必须映射到抽象类的抽象成员。抽象类的派生类如果是非抽象类,则必须通过方法重载来实现接口成员

索引器

为什么要使用索引器?

解析:当一个类中包含数组或集合成员时使用索引器可以大大简化度数组或集合成员的存取操作。

索引器的定义

  索引器的定义和属性类似

public  class Students

    {

       string[] names = new string[3];

       public string this[int index] {

           get{return names[index];}

           set{names[index]=value;}

       }

       int[] age = new int[3];

       public int this[string Key]

       {


           get {

               for (int i = 0; i < names.Length;i++ )

               {

                   if (Key.Equals(names[i]))

                   {

                       return age[i];

                   }

               }

               return -1;


           }

           set

           {

               for (int i = 0; i < names.Length; i++)

               {

                   if (Key.Equals(names[i]))

                   {

                        age[i]=value;

                   }

               }

              ;

           }

       }

    }

原文地址:http://www.cnblogs.com/wangzheand/p/5384648.html


 
趣味CSharp 更多文章 CSharp基础起步第一期--代码规范 CSharp基础起步第二期--虚方法,抽象方法 CSharp基础起步第四期--静态类 CSharp基础起步第六期--常用类库StringBuilder,List<T>泛型集合 CSharp基础起步第七期---文件流,文件操作
猜您喜欢 R语言学习框架综述 C语言精品游戏主角和怪物源码 如何设计一个可靠的消息系统 探索式测试基础系列——生活进阶曲 一个前端的自我修养