zoukankan      html  css  js  c++  java
  • 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--一个关于银行卡的接口例子

  • 相关阅读:
    面向对象的继承关系体现在数据结构上时,如何表示
    codeforces 584C Marina and Vasya
    codeforces 602A Two Bases
    LA 4329 PingPong
    codeforces 584B Kolya and Tanya
    codeforces 584A Olesya and Rodion
    codeforces 583B Robot's Task
    codeforces 583A Asphalting Roads
    codeforces 581C Developing Skills
    codeforces 581A Vasya the Hipster
  • 原文地址:https://www.cnblogs.com/01zxs/p/9470521.html
Copyright © 2011-2022 走看看