C# 接口

news2024/11/26 12:47:26

一 接口

接口(interface)实际上是一个约定。
如:ICloneable,IComparable;
接口是抽象成员的集合;
ICIonable含有方法clone();
IComparable含有方法compare();
接口是一个引用类型,比抽象类更抽象。

帮助实现多重继承
在这里插入图片描述

二 接口的用处

1 实现不相关的相同行为

不需要考虑这些类之间的层次关系;

2 通过接口可以了解对象的交互界面,而不需了解对象所对应的类

例如:

public sealed class  String:IComparable,ICloneable,
IConvertible,IEnumerable

三 定义有一个接口

public interface IStringList
{
    void Add(string s);
    int Count{get;}
    string this[int index]{get;set}
}

注:
public abstract 这两个关键词不写出来。

1 实现接口

class 类名:[父类,]接口,接口,....,接口
{
   public 方法(){.....}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 接口
{
    interface Runner
    {
        void run();
    }

    interface Swimmer
    {
        void swim();
    }

    abstract class Animal
    {
        abstract public void eat();
    }

    class Person:Animal,Runner,Swimmer
    {
        public void run()
        {
            Console.WriteLine("run");
        }

        public void swim()
        {
            Console.WriteLine("swim");
        }

        public override void eat()
        {
            Console.WriteLine("eat");
        }

        public void speak()
        {
            Console.WriteLine("speak");
        }
    }

    class TestInterface
    {
        static void m1(Runner r)
        {
            r.run();
        }
        static void m2(Swimmer s)
        {
            s.swim();
        }

        static void m3(Animal a)
        {
            a.eat();
        }

        static void m4(Person p)
        {
            p.speak();
        }

        public static void Main(string[] args)
        {
            Person p = new Person();
            m1(p);
            m2(p);
            m3(p);
            m4(p);
            Runner a = new Person();
            a.run();
            Console.ReadKey();
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 显示成员接口实现
{
   class InterfaceExplicitImpl
    {
        static void Main()
        {
            FileViewer f = new FileViewer();
            f.Test();
            ((IWindow)f).Close();

            IWindow w = new FileViewer();
            w.Close();
            Console.ReadKey();
        }
    }

    interface IWindow
    {
        void Close();
    }
    interface IFileHandler
    { 
        void Close(); 
    }
    
    class FileViewer:IWindow,IFileHandler
    {
        void IWindow.Close()
        {
            Console.WriteLine("Window Closed");
        }

        void IFileHandler.Close()
        {
            Console.WriteLine("File Closed");
        }

        public void Test()
        {
           ( (IWindow)this).Close();
        }
    }
}

总结:
接口是一种约定;
接口中有多个抽象方法;
接口能实现多继承;
面向接口进行编程;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/86218.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

配置本地Git从Gitlab上拉取项目

配置本地Git从Gitlab上拉取项目 安装git: https://git-scm.com/downloads git官网下载安装包,安装时一路next即可 ①配置用户名,邮箱 创建一个文件夹,任意位置即可鼠标右键选择,git bash here配置提交人姓名、邮箱 g…

一起学习用Verilog在FPGA上实现CNN----(二)卷积层设计

1 打开Vivado工程 Vivado工程文件如图: 打开Vivado软件,打开工程,如图: 自动升级到当前版本,如图: 暂时选择现有开发板的型号,如图: 出现一条警告性信息,暂时先不管&…

2023年第五届人工智能与机器学习国际会议(FAIML 2023)

2023年第五届人工智能与机器学习国际会议(FAIML 2023) 重要信息 会议网址:www.faiml.org 会议时间:2023年4月14-16日 召开地点:中国北京 截稿时间:2023年3月15日 录用通知:投稿后2周内 收录检索:EI,S…

差分进化算法在图像处理中的应用研究(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 本文为Storn和Price制定的著名差分进化计算智能算法的实现。该算法使用Otsu准则作为适应度函数,可用于使用多个阈值…

为什么球的表面积不能用周长积分而体积可以用面积积分?

问题描述: 将面积从最底下一层层叠到最上面可以得到球体积的正确公式 但是将周长从最底下一层层叠到最上面会得到错误结果,错误结果的几何意义是什么?以及是在什么地方积错了? 解答一: 首先, ∫−RR2πR2…

计算机研究生就业方向之去央企(国企)信息化部门

我一直跟学生们说你考计算机的研究生之前一定要想好你想干什么,如果你只是转码,那么你不一定要考研,至少以下几个职位研究生是没有啥优势的: 1,软件测试工程师(培训一下就行) 2,前…

C语言:星期一问题

题目需求 整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一? (不要告诉我你不知道今天是星期几哈) 请用一段程序实现了这一功能。 算法思路 判断1901年1月1日到2000年12月31的每一天是星期几,如果是星…

前端开发:JS中关于正则表达式的使用汇总

前言 在前端开发过程中,关于正则表达式的使用也是必备技能,尤其是在实际业务需求的时候,需要处理一些不能按照正常语句操作的逻辑,如前端开发中的字符匹配、参数处理等都需要正则表达式来匹配截取处理。虽然正则表达式在程序开发中…

01-18-spark-入门简介-部署入门

01-spark-入门简介: Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。 一次性数据计算:框架在处理数据的时候,从存储设备中读取数据,进行逻辑操作,然后将结果存储到介质中。 Hadoop 的 MR 框架和 S…

直播技术分享:千万级直播系统后端架构设计的方方面面

1、引言 本文以TFBOYS“日光旅行”七周年这场直播演唱会为案例,为你分享大型直播系统后端架构设计的方方面面,包括:基本架构、稳定性保障、安全性障、监控报警、应急预案等技术范畴。 案例中的这次演唱会采用了在线实时互动及演唱会现场的多…

【能效管理】关于某项目配套渗滤液工程电能管理系统的设计和应用

摘要: 介绍老港综合填埋场二期配套渗滤液工程电能管理系统,采用智能电力仪表采集配电现场的各种电参量。系统采用现场就地组网的方式,组网后通过现场总线通讯并远传至后台,通过Acrel-3000电能管理系统实现配电回路用电的实时监控…

服开与编排,老兵新传

前段时间,有同学问:编排与服开是什么关系?现在运营商都建设编排系统,那是不是服务开通以后就退出 OSS 舞台了?为什么会出现编排?这些问题对于行业老兵来说感慨万千,而对于新兵来说就要通过追溯其…

深度学习炼丹-超参数设定和网络训练

前言网络层内在参数 使用 3x3 卷积使用 cbr 组合尝试不同的权重初始化方法 图片尺寸与数据增强batch size 设定 背景知识batch size 定义选择合适大小的 batch size学习率和 batch size 关系 学习率参数设定 背景知识什么是学习率如何设置学习率 优化器选择 优化器定义如何选择…

中国制造构建全球产业链,是关于价值链的创新

经过20天激战,世界杯最终四强全部出炉。 与此同时,绿茵场外的品牌营销大战也即将步入终章。据伦敦数据分析咨询公司GlobalData表示,中国赞助商对卡塔尔世界杯总赞助金额为13.95亿美元,蝉联赞助金额榜单的首位。一时间&#xff0c…

一、Docker简介与安装

1、Docker是什么?为什么会出现Docker 假定您在开发一个购物商城,您使用的是一台笔记本电脑而且您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。此外,您的…

中国新闻周刊专访:大数据时代,普通人的信息安全如何保证?

技术是一个放大器 本质应该更好地服务人们的生产生活 近年来,随着大数据运用的日益频繁,技术日益成熟,隐私数据的泄露已到了触目惊心的状态。据不完全统计,2022年以来隐私数据泄露的各类案例多达数百万起,受隐私数据泄…

P4 PyTorch Broadcasting

前言: 维度变换 目录: Broadcasting 流程 broadcasting-able code参考: 课时24 Broadcasting-1_哔哩哔哩_bilibili 一 Broadcasting 流程 分三步: i broadcasting 从最后一个维度开始,进行维度对齐 ii 最前面插入一个维度 iii 最后对…

【测绘程序设计】——地形图图幅号计算

为便于地形图测制、管理和使用,各种比例尺地形图通常需要按规定的大小进行统一分幅,并进行系统的编号。地形图的分幅可分为两大类:一是按经纬度进行分幅,称为梯形分幅法,一般用于国家基本比例尺系列的地形图;二是按平面直角坐标进行分幅,称为矩形分幅法,一般用于大比例…

地心地固坐标系WGS84经纬度与笛卡尔直角坐标系相互转换的推导、理解与代码实现(C++和matlab)

目录一、大地坐标系现状简析1.1 我国1.2 美国1.3 日本二、经纬度坐标(L,B,H)与直角坐标系坐标(X,Y,Z)相互转换2.1 正解(L,B,H)——>(X,Y,Z)2.1.1 数学推导2.1.2 C代码实现2.1.3 m…

文件描述符和缓冲区

文章目录文件操作符系统调用接口文件接口的简单实用实验一:打开文件写入信息实验二:read接口读取文件返回值和fd联想到数组下标OS怎么管理文件呢?先描述再组织。一切皆文件012的操作文件描述符的分配规则:输出重定向的原理。追加重…