首页 > 代码库 > 接口知识点

接口知识点

接口(interface)知识点

1.接口的定义和声明

  接口:是指一组函数成员而不实现它们的引用类类型。所以,只能类和结构来实现接口。

  接口声明必须注意几点:

  @1.必须在基类列表后面列出接口名称;

  @2.必须为接口的每一个成员提供实现。

  @3.接口声明不能包括:数据成员和静态成员。

  @4.接口声明可以有任何访问修饰符:public,private,internal,protected。

  @5.接口的成员是隐式public,不允许有任何访问修饰符,包括public。

  @6.按照惯例,接口名称必须从大写I开始。

  @7.必须有关键字:interface。

  @8.接口成员不能包含任何实现代码,每一个成员声明的主体后必须使用分号。只有类和结构才能实现接口。

  @9.如果从基类继承并实现了接口,基类列表中的基类名称必须放在所有接口之前。

2.代码例子:声明接口,对对象数组进行排序。

  class MyClass : IComparable
  {
    public int TheValue;
    public int CompareTo(object obj)
    {
      MyClass mc = (MyClass)obj;
      if (this.TheValue > mc.TheValue) return 1;
      if (this.TheValue < mc.TheValue) return -1;
      return 0;
    }
  }
  class Program
  {
    static void PrintOut(MyClass[] mc )
    {
      foreach (var item in mc)
      Console.WriteLine(item.TheValue);
    }
    static void Main(string[] args)
    {
      var myInt = new int[] { 5 , 8 , 12 , 10};
      MyClass[] mcArr =new MyClass[4] ;
      for (int i = 0; i < 4; i++)
      {
        mcArr[i] = new MyClass();
        mcArr[i].TheValue = http://www.mamicode.com/myInt[i];
      }
      PrintOut(mcArr);
      Array.Sort(mcArr);
      PrintOut(mcArr);

    }

  }

3.接口是引用类型和as运算符

  @1.我们不能通过对象成员直接访问接口。我们可以把类对象引用,强制转换为接口类型来引用接口。

  @2.关于接口引用的代码如下:

  interface IInfo
  { void PrintfOut(string s); }
  class MyClass : IInfo
  {
    public void PrintfOut(string s)
    { Console.WriteLine(s); }
  }
  class Program
  {
    static void Main(string[] args)
    {
      MyClass mc = new MyClass();
      mc.PrintfOut("I Love You!");   //接口使用
      IInfo fo = (IInfo)mc;   //通过强制转换使用接口引用
      fo.PrintfOut("I Love You!");
      IInfo Info = mc as IInfo;   //通过as运算符,使用接口引用,功能和强制转换一样
      Info.PrintfOut("I Love You!");

    }

  }

4.显式接口成员实现

  MyClass : IInfo

  {

    void IInfo.Printf(string s )

    {

      ......

    }

  }

5.不同类实现一个接口的代码

  class Animal { }
  interface ILiveBirth
  { string BabyCalled();}
  class Cat : Animal, ILiveBirth
  {
    string ILiveBirth.BabyCalled()
    { return "HAHA"; }
  }
  class Dog : Animal, ILiveBirth
  {
    public string BabyCalled()
    { return "LaLa"; }
  }
  class Bird : Animal
  { }
  class Program
  {
  static void Main(string[] args)
  {
    var animalArray = new Animal[3] ;
    animalArray[0] = new Cat();
    animalArray[1] = new Dog();
    animalArray[2] = new Bird();
    foreach (var item in animalArray)
    {
      ILiveBirth b = item as ILiveBirth;
      if (b != null)
      Console.WriteLine(b.BabyCalled());
    }
  }

 

接口知识点