C# 接口(接口可以继承接口)

接口可以继承接口

之前我们已经知道接口实现可以从基类被继承,而接口本身也可以从一个或多个接口继承而来。

  • 要指定某个接口继承其他的接口,应在接口声明中把基接口名称以逗号分隔的列表形式

    放在接口名称后面的冒号之后,如下所示。

  • 类在基类列表中只能有一个类名,而接口可以在基接口列表中有任意多个接口。

    • 列表中的接口本身可以继承其他接口。
    • 结果接口包含它声明的所有成员和基接口的所有成员。
      图16-11中的代码演示了3个接口的声明。IDataIO接口从前两个接口继承而来图右边部分
      显示IDataIO包含了另外两个接口。
csharp 复制代码
interface IDataIO:IDataRetrieve,IDatatStore
{
    interface IDataRetrieve
    {
        int GetData();
    }

    interface IDatatStore
    {
        void SetData(int x);
    }
    //从前两个接口继承而来
    interface IDataIO:IDataRetrieve,IDatatStore
    {

    }

    class MyData:IDataIO{
        int nPrivateData;
        public int GetData()
        {
            return nPrivateData;
        }

        public void SetData(int x)
        {
            nPrivateData=x;
        }
    }

    class Program{
        static void Main(){
            MyData data=new MyData();
            data.SetData(5);
            Console.WriteLine("{0}",data.GetData());
        }
    }
}

不同类实现一个接囗的示例

如下代码演示了已经介绍过的接口的一些方面。程序声明一个名为Animal的类,它被作为

其他一些表示各种类型动物的类的基类。它还声明了一个叫作ILiveBirth的接口。

Cat、Dog和Bird类都从Animal基类继承而来。Cat和Dog都实现了ILiveBirth接口,而Bird

类没有。

在Main中,程序创建了Animal对象的数组并用3个动物类的对象进行填充。然后,程序遍

历数组并使用as运算符获取指向ILiveBirth接口的引用,并调用了BabyCalled方法。

csharp 复制代码
interface ILiveBirth   //声明接口
{
    string BabyCalled();
}

class Animal{}   //基类Animal

class Cat:Animal,ILiveBirth    //声明Cat类
{
    string ILiveBirth.BabyCalled()
    {return "kitten";}
}

class Dog:Animal,ILiveBirth    //声明Dog类
{
    string ILiveBirth.BabyCalled()
    {
        return "puppy";
    }

    class Bird:Animal          //声明Bird类
    {

    }

    class Program
    {
        static void Main()
        {
            Animal[] animalArray=new Animal[3];   //创建Animal数组
            animalArray[0]=new Cat();             //插入Cat类对象
            animalArray[1]=new Bird();            //插入Bird类对象
            animalArray[2]=new Dog();             //插入Dog类对象
            foreach(Animal a in animalArray)      //在数组中循环
            {
                ILiveBirth b= a as ILiveBirth;    //如果实现ILiveBirth
                if(b!=null)
                    Console.WriteLine($"Baby is called:{b.BabyCalled()}");
            }
        }
    }
}

图16-12演示了内存中的数组和对象。

相关推荐
figo10tf2 小时前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
zhangyi_viva2 小时前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端
橙露2 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
晚霞的不甘2 小时前
Flutter for OpenHarmony 可视化教学:A* 寻路算法的交互式演示
人工智能·算法·flutter·架构·开源·音视频
小程故事多_802 小时前
Agent Infra核心技术解析:Sandbox sandbox技术原理、选型逻辑与主流方案全景
java·开发语言·人工智能·aigc
冰暮流星2 小时前
sql语言之分组语句group by
java·数据库·sql
望舒5132 小时前
代码随想录day25,回溯算法part4
java·数据结构·算法·leetcode
黎雁·泠崖2 小时前
【魔法森林冒险】3/14 Allen类(一):主角核心属性与初始化
java·开发语言
黎雁·泠崖2 小时前
【魔法森林冒险】1/14 项目总览:用Java打造你的第一个回合制冒险游戏
java·开发语言
NuageL3 小时前
原始Json字符串转化为Java对象列表/把中文键名变成英文键名
java·spring boot·json