【C#基础学习】第十八章、接口

news2024/11/19 3:43:08

目录

接口

1.接口 

1.1 声明接口

1.2 实现接口&调用接口

 1.2.1 显式接口实现方式

1.2.2 显式接口实现&隐式接口实现的使用场景

1.3 as运算符

2.接口继承接口


接口

1.接口 

   接口的意义:C#的继承不支持一个子类拥有多个父类。而接口的存在就是为了弥补这一缺点,接口允许一个类拥有多个接口。正因有接口的存在,C#不仅有面向对象的编程,还有面向接口的编程。

  接口的定义:声明一组函数成员而不实现它们的引用类型。接口可以被继承,继承该接口的类或结构可以实现这些方法。

  创建接口的步骤:

  1. 第一步:新建项。右击解决方案,点击添加,新建项,然后创建一个新的控制台应用,并命名为CustomInterface
  2. 第二步:创建接口文件。右击CustomInterface项目,添加,新建项,选择接口。

1.1 声明接口

  声明接口的语法:        interface  接口名 {...}

  示例:

                                interface  IAdd

                                {

                                    int Add(int a,int b);//声明方法

                                }

    接口命名规范:接口名是前面要加一个大写的I。其含义是Interface的缩写,在编码时,方便我们知道它代表接口。

  使用接口的要求 :

  • 接口可以使用访问修饰符。
  • 在接口中定义的方法不需要添加修饰符,默认为public。
  • 接口可以只能包含非静态的方法、属性、事件、索引器。
    • 但不能包含静态成员、字段、运算符重载、实例构造函数、析构函数。
  • 接口中存放的是方法的声明,并没有存放方法的定义。接口的声明中分号代替了方法块
  • 值得注意的是,接口无法实例化。

1.2 实现接口&调用接口

  继承接口的语法:        public class 类名:接口名1,接口名2{...}

   实现接口的要求:

  • 必须实现接口中所有的成员
  • 基类列表有接口的名字

   示例:

internal interface IAdd
{
    //声明方法
    int Add(int a,int b);
}
public class Count:IAdd
{
    private int a=10;
    
    public int A
    {
        set{a=value;}
        get{return a;}
    }
    //隐式接口实现方法
    public int Add(int x,int y=10)
    {
        return x+y;
    } 
}

class Program
{
    static void Main(string[] args)
    {
        Count one = new Count();
        Console.WriteLine("两数相加和为{0}",one.Add(10));
    }
}

 1.2.1 显式接口实现方式

  显式接口的意义:解决一个类在继承不同接口时,接口中方法命名冲突的问腿。

  隐式接口实现方式:在实现接口方法的时候,没有明确指明实现哪个接口中的方法。(因为接口可以继承多个,不可避免有些接口的方法中标签和返回类型都相同,即方法名、参数)

  显式接口实现方式:明确指明是实现哪个接口中的方法。

   显式接口实现的语法:

                        返回类型  接口名.方法名(参数){...}

  使用显式接口的要求:

  • 显式实现的成员固定为是私有的。不能使用访问修饰符
  • 显式实现的成员不能被类对象访问。
  • 要访问显式实现的成员,需要将继承类的实例对象显式转换为对应的接口类型,并通过接口来调用成员。

 实例:

    //接口的声明    
    internal interface IChinese
    {
        void SayHello();//声明方法
    }
    internal interface IAmerican
    {
        void SayHello();//声明方法
    }

    //接口的实现
    public class Speaker:IChinese, IAmerican 
    {
        //显式接口的实现
        void IChinese.SayHello() { Console.WriteLine("你好"); }
        void IAmerican.SayHello() { Console.WriteLine("Hello"); }
        //隐式接口的实现
        public void SayHello() { Console.WriteLine("你好丫hello"); }
    }
    
    //接口的调用
    class Program
    {
        static void Main(string[] args)
        {
            Speaker speaker = new Speaker();
            speaker.SayHello();
            //显式地转化为通过IAmerican接口来调用SayHello方法
            IAmerican american = (IAmerican)speaker;
            american.SayHello();

            IChinese chinese = (IChinese)speaker; 
            chinese.SayHello();
        }
    }

1.2.2 显式接口实现&隐式接口实现的使用场景

  • 采用隐式接口实现:类和接口都可以访问接口中的成员。
    • 实现单个接口
  • 采用显式接口实现:只能通过接口访问接口中的成员。
    • ​​​​​​​实现多个接口。特别是接口中包含相同的标签和返回类型的情况。

1.3 as运算符

  as运算符的意义:通过显式接口的实现,我们知道可以通过强制转换类型来调用接口的方法。而as的存在,就是另一个更好调用接口成员的方法。我们

  as运算符的定义:可以通过as运算符来避免将类实例对象强制转换为未实现成员的接口类型时,报错的问题。

 as运算符的语法:

                        接口名 变量名 =  类实例对象 as 接口名

示例:

                        IAdd        a      =       b            as   IAdd;   

  as运算符的使用要求:

  • 如果类实现了接口,则返回指向接口的引用
  • 如果类没有实现接口,则返回null而不抛出异常。

2.接口继承接口

   接口继承接口的定义:接口不仅可以被类或结构继承,还可以被一个或多个接口继承。

  接口继承接口的语法:

                                interface  接口:接口1,接口2...{...}

   接口继承接口的要求:

  • 派生接口拥有它本身成员和基接口的所有成员。

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

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

相关文章

C# 数组的声明与分配空间

一 数组的概述 数组是多个相同类型数据的组合;数组属引用类型; 1 一维数组声明 一维数组的声明方式: int[] a1;注意方括号写到变量名的签名; double [] b mydate[] c; C# 语言中声明的数组时不能指定其长度(数组中元素的个数)…

【RPA进阶】 一文了解使用Visual Studio扩展UiPath Activity Creator创建自定义Activity

🐋作者简介:博主是一位.Net开发者,同时也是RPA和低代码平台的践行者。 🐬个人主页:会敲键盘的肘子 🐰系列专栏:UiPath 🦀专栏简介:UiPath在传统的RPA(Robotic…

Dockerfile构建Springboot镜像

Dockerfile构建Springboot镜像 文章目录Dockerfile构建Springboot镜像简介实例演示前期准备Docker环境Springboot项目Dockerfile文件Windows要求构建镜像启动测试Linux要求构建镜像启动测试简介 容器技术大流行的时代,也是docker大流行的时代。 此文章以一个简单的实…

无线网卡收包流程

环境 x86_64 Linux, AR9462 无线网卡,PCIe 接口 ath9k 驱动 收包过程 ① 无线网卡从空气中捕获到无线数据包 【物理层】 ② 无线网卡把帧 DMA 到内存的 Ring Buffer ③ 无线网卡向 CPU 发起中断请求 ④ CPU 响应中断,执行 ISR,…

fatfs相关宏定义说明

fat16文件系统DBR 宏定义如下: #define BS_JmpBoot 0 //跳转指令。3字节。/* x86 jump instruction (3-byte) */ #define BS_OEMName 3 //OEM名称。8字节。/* OEM name (8-byte) */ #define BPB_BytsPerSec 11 //扇区字节数。2字节。/* Sector size [byte…

Python学习基础笔记四十五——包

C:\Program Files\Python310\Lib 1、 包的概念:把解决同一类问题的模块放在同一个文件夹里,我们就称为包。 2、在PyCharm中创建一个包: 文件夹中会有一个init.py文件。 在Python3中没有这个__init__.py文件也没有问题。 3、在包A和包B下有同…

Go设计与实现 -- map哈希表

Go语言中的哈希表有它自己的一套实现方式。和Java的哈希表还是有些不同的,但是为了保证知识体系的完整性,我还是准备从头开始说起。 哈希表设计原理 哈希表的读写时间复杂度是O(1),因为它提供了键值之间的映射。要实现一个性能优异的哈希表…

spring——AOP面向切面编程——基于XML的AspectJ AOP开发(转载)

我们可以在 Spring 项目中通过 XML 配置,对切面(Aspect 或 Advisor)、切点(PointCut)以及通知(Advice)进行定义和管理,以实现基于 AspectJ 的 AOP 开发。Spring 提供了基于 XML 的 AOP 支持,并提供了一个名为“aop”的命名空间,该…

Docker笔记--使用Docker部署MySQL

1--Docker部署MySQL ① 搜索MySQL镜像 docker search mysql ② 拉取MySQL镜像 docker pull mysql:latest ③ 创建MySQL容器 首先在宿主机创建MySQL的映射目录,即数据卷: cd /home mkdir mysql cd mysql 之后在当前目录创建MySQL容器($PW…

【事故复盘】吐血整理一场线上事故——CPU飙升200%

🔍 经验使你在第二次犯相同错误时及时发现。 —— 琼斯 🔖 事故时间:12.7日 17:43 ~ 21:03 🔖 事故影响:服务接口查询慢,用户查看数据转圈 🔖 事故过程: 那是一个宛如平静的下午&…

128-150-mysql-高级篇-索引及调优篇

115-mysql-高级篇-索引及调优篇: 索引及调优篇 1、索引的创建与设计原则 1. 索引的声明与使用 1.1 索引的分类 从功能逻辑上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。按照物理实现方式,索引可以分…

BUUCTF Web1

[极客大挑战 2019]EasySQL 试了个万能密码就能上去了 flag: flag{8e685472-02e4-440a-b04e-b0d9b6d9c27f} [HCTF 2018]WarmUp 看源码有个source.php <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist ["source&qu…

Mysql 创建存储过程和函数及各种例子

Mysql 创建存储过程和函数及各种例子1. Mysql 创建存储过程1.1 前言知识1.1.1 语法结构1.1.2 简单解释1.2 创建存储过程入门例子1.2.1 无参存储过程1.2.1.1 不带变量1.2.1.2 带变量1.2.2 有入参的存储过程1.2.3 有出参的存储过程1.2.4 有入参和存储的存储过程1.2.5 inout的存储…

如何将镜像上传至阿里云?如何从阿里云中拉取自己的镜像?

目录 如何将制作好的镜像上传至阿里云&#xff1f; 一、前期准备 1、注册阿里云账户 2、登录账号 3、配置Docker加速器 4、创建镜像仓库的命名空间&#xff08;私有的&#xff09; 5.创建镜像仓库(创建镜像仓库时要绑定一个代码托管网站&#xff0c;例如&#xff1a;githu…

Zookeeper集群搭建

文章目录前言Zookeeper集群搭建&#xff08;一&#xff09;LeaderFollower模式&#xff08;二&#xff09;下载zookeeeper的压缩包&#xff08;三&#xff09;解压&#xff08;四&#xff09;修改配置文件&#xff08;五&#xff09;添加myid配置&#xff08;六&#xff09;安装…

痞子衡嵌入式:存储器大厂Micron的NOR Flash芯片特殊丝印设计(FBGA代码)

大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。今天痞子衡给大家讲的是存储器大厂Micron的NOR Flash芯片特殊丝印设计(FBGA代码)。 痞子衡之前写过一篇文章 《J-Flash在Micron Flash固定区域下载校验失败的故事》&#xff0c;这篇文章里提及了 Micron 家的串行…

明峰医疗IPO终止:亏损超过14亿元,王瑶法、潘华素夫妇为实控人

近日&#xff0c;上海证券交易所科创板披露的信息显示&#xff0c;明峰医疗系统股份有限公司&#xff08;下称“明峰医疗”&#xff09;向上海证券交易所提交了撤回上市申请文件的申请&#xff0c;保荐人海通证券提交了撤回保荐的申请。 因此&#xff0c;上海证券交易所决定终…

设计模式之创建型模式---单例模式

文章目录1.介绍2.应用场景3.实现3.1 结构3.2 类图3.3 代码示例3.3.1 饿汉式3.3.2 懒汉式3.3.3 双重检验锁3.3.3 静态内部类实现单例3.3.4 枚举类实现单例总结1.介绍 单例模式(singleton) 是指某个类中能生成一个实例&#xff0c;该类提供了一个全局访问点&#xff0c;提供一个唯…

JUC并发编程与源码分析笔记07-volatile与JMM

被volatile修饰的变量有两大特点 可见性、有序性&#xff0c;但是不保证原子性。 当写一个volatile变量时&#xff0c;JMM会把该线程对应的本地内存中的共享变量值立即刷新回主内存中。当读一个volatile变量时&#xff0c;JMM会把该线程对应的本地内存设置为无效&#xff0c;重…

Java开发:汇编语言

一、为什么学习汇编语言 中国人和中国人沟通需要学习汉语 中国人和美国人沟通在会汉语的基础上还要学习英语 那么&#xff0c;人和机器沟通的话需要学习哪些语言呢&#xff1f; 答案是&#xff1a;人类的语言机器语言 但是&#xff0c;机器语言都是由0和1组成&#xff0c;人类…