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--一个关于银行卡的接口例子

  • 相关阅读:
    CSS自学笔记(9):CSS拓展(二)
    CSS自学笔记(8):CSS拓展(一)
    给大家介绍几个常见的Android代码片段
    分享一个完美的新闻客户端(酷商城)Android源码
    Android dex ,xml 文件反编译方法
    Android宝宝点点乐游戏源码完整版
    Excel基础视频教程在线观看
    计算机二级考试Access教程
    程序员面试题目汇总讲解
    JAVA在线观看视频教程完整版
  • 原文地址:https://www.cnblogs.com/01zxs/p/9470521.html
Copyright © 2011-2022 走看看