C#基础10:接口

 

PS:注释和讲解部分在代码中

  • 虚方法等同于虚函数
  • 抽象方法等同于纯虚函数

1. 接口

什么是接口?

  • 当抽象类中所有的方法都是抽象方法的时候,这个时候可以把这个抽象类用另外一种形式来表现,这种形式叫接口
  • 接口可以当成特殊的类

接口的定义:

  • 接口使用interface关键字定义,不是class关键字
  • 有一个不成文的规定:一般接口在命名时需要在名字前面加个大写字母I
  • 接口中不能包含字段,可以包含抽象属性
  • 接口中定义的函数必须全是纯虚函数,但是不需要用abstract修饰
  • 接口中的成员不允许添加访问修饰符,默认都是public

接口的使用:

  • 接口当然不能被实例化,毕竟里面全是纯虚函数(抽象方法)
  • 一个类可以实现多个接口,被实现的多个接口之间用逗号分隔
  • 一个接口可以继承多个接口,接口之间也是用逗号分隔(这也是接口和类的区别之一,接口是可以多继承的,而类只能单继承)

你可能觉得:接口这个东西好像没什么用啊,其实确实目前看来没什么用,但是先了解就好了,等以后再说

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace C4_程序设计
{
    interface IText1
    {
        int GetVal { get; set; }        //抽象属性
        void Hello(string name);
    }
    interface IText2
    {
        void Hello(string name);
    }
    class Player: IText1,IText2         //必须实现接口中的所有抽象属性,抽象方法,才可以通过编译
    {                               //继承了两个接口,其中两个接口里面有着完全相同的抽象方法(非重载),可以当做合并成只有一个,或者你可以显式实现,显式实现方法如下↓
        int val;
        public int GetVal
        {
            get
            {
                return val;
            }
            set
            {
                if (value <= 0 || value >= 100)
                    val = -1;
                else
                    val = value;
            }
        }
        public void Hello(string name)
        {
            Console.WriteLine("Hello "+name+"!");
        }
        void IText2.Hello(string name)              //显式实现接口
        {
            Console.WriteLine("233333");
        }
    }
    class 接口
    {
        static void Main()
        {
            Player me = new Player();
            me.GetVal = 1000;
            me.Hello("world");      //Hello world!

            IText2 you = new Player();
            //you.GetVal = 1000;       错误,申明类(申明接口)IText2里面并没有“GetVal”的定义
            you.Hello("world");     //233333
        }
    }
}

附:VS中,类实现接口的快捷选项:

C#基础10:接口

 

2. 虚方法,抽象类,接口三者语法对比

C#基础10:接口