Interface
Interface 官方描述:
1、接口只包含方法、属性、事件或索引器的签名。 实现接口的类或结构必须实现接口定义中指定的接口成员。
2、 一个接口可从一个或多个基接口继承。
3、基类型列表包含基类和接口时,基类必须是列表中的第 1 项。(就是继承列表中 基类需要写在第一个位置,后面再写接口)
4、实现接口的类可以显式实现该接口的成员。 显式实现的成员不能通过类实例访问,而只能通过接口实例访问。
项目源码地址:https://gitee.com/michel4liu/LearnCSharp.git
项目:LearnInterface
环境VS2017 .NET Core2.0
官方描述的1、2 如下图
官方描述的3如下图
官方描述的4
有两个作用
1、如果一个类实现的两个接口包含签名相同的成员,则在该类上实现此成员会导致这两个接口将此成员用作其实现。
interface IA
{
void Cc();
}
interface IB
{
void Cc();
}
class Xx : IA, IB
{
public void Cc()
{
Console.WriteLine($"{nameof(Xx)}.Cc");
}
}
static void Main(string[] args)
{
Xx x = new Xx();
x.Cc(); //输出 Xx.Cc
}
只能有一个实现,如果想实现不同的Cc方法 需要用显示实现,如下
class Xx : IA, IB
{
void IA.Cc()
{
Console.WriteLine($"{nameof(Xx)}.IA.Cc");
}
void IB.Cc()
{
Console.WriteLine($"{nameof(Xx)}.IB.Cc");
}
}
static void Main(string[] args)
{
Xx x = new Xx();
((IA)x).Cc(); //输出 Xx.IA.Cc
((IB)x).Cc(); //输出 Xx.IB.Cc
}
以上x对象中已经没有Cc方法,必须用接口调用.
2、在框架中有时会用于解耦,要求必须依赖接口而非实现或接口
注意点
1、接口命名约定都是已大写的’I’开头