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中,类实现接口的快捷选项:
2. 虚方法,抽象类,接口三者语法对比