C#关键字扫盲——Interface 接口

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’开头

猜你喜欢

转载自blog.csdn.net/michel4liu/article/details/79683416