C# 接口

一、引言

   接口接口,经常在项目里面说这个词,甚至在找工作面试的时候,面试官问:“项目之间是怎么协作的?” ,  我答曰:“写好接口,模块分工,合并代码”。 其实我在瞎说,因为我根本没用到接口这个东西。只是类与类之间的互相调用。最近闲来无事,总结下接口。

  接口在项目协同开发里面,作用是比较大的,最显著的一个作用就是 起到规范约束。接口定义了需要实现什么功能,具体的实现代码只能在派生类中完成。而且派生类必须全部实现接口所定义的所有功能。在开发之前,一个人写好接口,不做实现,然后其余人继承该接口,实现各自的功能模块,最后合并、调用的时候比较简单。否则你合并的时候会发现,我擦,这写的都是什么函数啊?函数名、参数都不一样!(各自有各自的编程水平、思想。因此写出来的成果在合并的人看来,比较杂乱,百花齐放啊)

 

官方介绍:

  接口是一种为所有继承接口的类定义需要遵循的语法约定。接口定义了语法约定的“需要做什么”部分,派生类定义了语法约定的“如何实现”部分。

  接口定义属性,方法和事件,它们是接口的成员。 接口只包含成员的声明。 派生类负责定义和实现成员。接口通常有助于为派生类提供遵循的标准结构。

  抽象类在某种程度上起着相同的作用,但是,当基类只有少数方法声明并且由派生类实现时,才会考虑使用抽象类。

  


二、详解

接口定义

 

interface IEquatable<T>
{
    bool Equals(T obj);
}

 

  • 接口可以包含方法、属性、事件、索引器,或者这四个成员类型的任意组合。

  • 接口不提供实现,继承类负责实现全部功能

  • 若要实现接口成员,实现的选件类的相应成员必须是公共的非静态的,并且具有名称和签名和接口成员相同

  • 派生类可以继承一个或者多个接口。

   


接口示例

借鉴下他们的动物叫的例子,介绍下 接口 的用法。(转)

 动物接口

public interface IF_Animal
  {
    void Shout();//叫喊
  }

狗狗类,继承接口,实现叫喊

class Dog : IF_Animal
  {
    public void Shout()
     {
      Console.WriteLine( "汪汪汪!");
     }
  }

猫猫类,继承接口,实现叫喊

class Cat : IF_Animal
  {
    public void Shout()
     {
      Console.WriteLine("喵喵喵~");
     }
  }

是时候实现百兽齐鸣了,哈哈哈

static void Main(string[] args)
  {
    List<IF_Animal> animals = new List<IF_Animal>();
    IF_Animal dog = new Dog();
    animals.Add(dog);
    IF_Animal cat = new Cat();
    animals.Add(cat);
           
    foreach(IF_Animal e in animals)
     {
      e.Shout();
     }
  }

  


继承多个接口

  半兽人继承动物吼叫和人类讲话这2个接口。(增强版)

 动物接口

public interface IF_Animal
  {
    void Shout();//叫喊
  }
人类接口
public interface IF_People
    {
    void Say();//说话
    }

半兽人继承上述2个接口

class Animal_People:IF_Animal,IF_People    //继承多个接口,逗号隔开
    {
        public void Shout()
        {
            Console.WriteLine("兽人吼叫:阿欧!");
        }

        public void Say()
        {
            Console.WriteLine("人类说话:你好啊~");
        }
    }

调用,是时候让半兽人说话了

Animal_People animal_People = new Animal_People();
animal_People.Say();
animal_People.Shout();

输出结果:

人类说话:你好啊~
兽人吼叫:阿欧!

  


 接口的成员变量

接口:

interface Border
  {
    int W { get; set; }
    int H { get; set; }
  }

正方形继承接口:

class Square : Border
  {
    private int x, y;
    public int W
        {
        get { return x; }
            set { x = value; }
        }

    public int H
        {
            get { return y; }
            set { y = value; }
        }
    }

接口的使用:

Square b = new Square();
b.W = 2;
b.H = 2;

 


 接口的显示实现

定义2个接口

interface IControl //接口1
    {
        void Paint();
    }

interface ISurface //接口 2
    {
        void Paint();
    }

SampleClass
继承2个接口
class SampleClass : IControl, ISurface
    {
        //void Paint();//如此隐式实现肯定容易出现歧义
    void IControl.Paint() //显式实现
        {
            System.Console.WriteLine("IControl.Paint");
        }

    void ISurface.Paint()//显式实现
        {
            System.Console.WriteLine("ISurface.Paint");
        }
    }

调用接口

SampleClass sampleClass = new SampleClass();
//  sampleClass.Paint(); 错误
IControl control = (IControl)sampleClass;
control.Paint();

接口中的成员显式实现后,必须通过接口调用,而不能直接通过类进行调用

  


三、总结

抽象类:

  • 一种不能实例化而必须从中继承的类,抽象类可以提供实现,也可以不提供实现
  • 子类只能从一个抽象类继承
  • 抽象类应主要用于关系密切的对象
  • 如果要设计大的功能单元,则使用抽象类。
  • 如果预计要创建组件的多个版本,则创建抽象类

 

接口:

  • 是完全抽象的成员集合,不提供认识实现。
  • 类或者结构可以继承几个接口。
  • 接口最适合为不相关的类提供通用功能
  • 如果要设计小而简练的功能块,则使用接口

 


四、引用

[1]C# 接口《通俗解释》https://www.cnblogs.com/hamburger/p/4681681.html--这个写的真是形象生动,特别适合新手看

[2]浅谈c#接口的问题,适合新手来了解https://www.cnblogs.com/zenkey/p/5753382.html--这个里面的百兽齐鸣让我笑了,推荐

[3]对C#中的接口使用和理解http://www.360doc.com/content/12/0320/03/3810344_195832587.shtml

[4]C# 接口的作用浅谈举例https://blog.csdn.net/liuqinghui1990/article/details/77171051--一个关于银行卡的接口例子

 

posted @ 2018-08-13 19:54  激情1995  阅读(234)  评论(0编辑  收藏  举报