什么是接口(interface)
由于 C#中不能实现多继承,一个子类只能有一个父类,所有C#给我们提供了接口:
接口的作用:
个人理解:当多个脚本需要使用共同方法,或属性的时候,(比如游戏中的穿装备,一个玩家可以穿多件不同的装备,而每件装备的属性和功能都不相同,那么这种一对多关系的功能,就可以使用接口,每件装备一个接口,这样就可以实现一对多的功能)使用接口。
接口的特点:
<1>接口成员不能使用new ,static, abstract,virtual,override关键字修饰。
<2>接口可以多实现,一个子类可以在 继承一个父类的同时实现多个接口。但父类必须在最前面(也就是 : 之后的第一个)
<3>接口中的方法不能出现方法体,也就是接口中只能定义方法,但不能存在实例。
<4>实现接口的时候必须实现接口中的所有成员。
<5>接口中只能包含方法、属性、事件和索引的组合。
<6>接口不能实例化(创建对象),只能被实现。
<7>接口不能添加访问修饰符,默认是public(接口中的成员必须在外界被实现,所以不能更改访问修饰符)。
<8>接口用interface修饰。
接口的使用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
//定义武器接口
interface IWeapon
{
//武器的名字,用属性表示
string _Name { get; }
//武器自带技能
void Skill();
}
interface IArmor
{
//防具自动增加HP
void M_Hp();
}
//实现以上两个接口
public class Person : IWeapon, IArmor
{
//这里原本的形式是 public string _Name { get {return "金箍棒"}; }
//由于不能直接使用,所以用lambda 表达式来为属性返回值
public string _Name { get => "金箍棒"; }
//防具的方法
public void M_Hp()
{
Console.WriteLine ("穿上防具加10HP" );
}
//武器的技能方法
public void Skill()
{
Console.WriteLine ("释放技能,吻别" );
}
}
class Program
{
static void Main(string[] args)
{
Person p = new Person ( );
p.M_Hp ( );
p.Skill ( );
Console.WriteLine (p._Name );
Console.ReadKey ( );
}
}
}