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

C#开发——接口Interface C#开发接口Interface 阅读详情

目录

接口

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...{...}

   接口继承接口的要求:

  • 派生接口拥有它本身成员和基接口的所有成员。
C# 接口(Interface)全面详解(概念 + 用法 + 落地示例) 接口(interface)是 C# 中一种特殊的引用类型,它仅定义一套「行为规范 / 契约」,只声明方法、属性、索引器或事件的签名(无具体实现),要求实现该接口的类 / 结构必须严格遵守这份契约,完成所有成员的具体实现。简单理解:接口是一份「说明书」,定义了 “必须要做什么”,但不规定 “具体怎么做”,实现者需按照说明书完成具体功能。使用interface关键字定义接口,接口命名通常以I开头(行业约定俗成,便于区分接口和类,如/// 示例接口:定义“可读写数据”的契约。 阅读详情

相关推荐

第十八章:C# 结构体(Struct)

结构体(Struct)是C#中用于封装一组相关变量的数据类型。与类(Class)不同,结构体是值类型,并且通常用于表示较小的数据结构。理解结构体的定义、初始化和使用有助于在C#编程中高效地组织和管理数据。

个人笔记 588

c# --- 接口

接口从某种程度上来说也是一个类,但是接口中只包含方法的声明而没有方法的实现z创建接口的关键字:interface(接口,人机交互界面)创建接口的语法:接口的访问权限 interface(接口关键字) 接口名(I + 自命名) --- 给接口命名的时候我们都会在我们给定的自命名前面加一个I 来区分接口和类{放在接口中的函数(方法)声明}实现接口的方法:我们通常通过继承的方式来实现接口继承了接口的类就要负责将接口定义中的所有函数声明进行实现接口中只能够有声明,不能有字段(变量)...

qq_51947882的博客 5657

C#实现接口 (附完整源码)

C#实现接口 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 347

C#中的接口

简单介绍了C#中的接口,包括了类对接口的实现,接口之间的继承等。

weixin_66598341的博客 5788

数理统计四大分布---正态分布、卡方分布、学生t分布和F分布

在统计学上,我们会遇到一些常见的分布,除了正态分布外,,如t检验对应的t分布,检验对应的分布,方差分析对应的F分布等。这些分布是统计学的基础,在假设检验、方差分析等领域都起着至关重要的作用。在此,我们对这四种分布做详细的介绍,并附上MATLAB代码。 四种分布的讲解摘自MATLAB 2016的统计学和机器学习工具箱,有兴趣的可以去查看英文原版。 另外,为了方便,上传文档为图片格式,可能有些模糊...

suncangan的博客 5万+

电赛控制-----经验分享

1.赛前准备 先简单介绍一下电赛。电赛是两年一届,单数年是大电赛,全称是全国大学生电子设计大赛,之前由瑞萨电子赞助,所以之前也叫瑞萨杯,从19年开始赞助方变成了TI公司,偶数年是小电赛,全称是“TI杯”模电邀请赛,(这里不得不提TI公司的实力是愈来愈大了),一般来说小电赛的含金量会略低于大电赛,而且对与想拿国奖的同学来说还是要参加大电赛,因为小电赛一般每个学校会限制只有两个队伍进国赛,而大电赛是没有这个限制的,而且我们学校电赛保研的话,大电赛只要求国二,而小电赛只有国一才可以保,这样难度就增加了很多。..

qq_35656655的博客 1万+

C#学习笔记

C#学习笔记

xfeng20的博客 275

FreeSWITCH编译安装详细文档

本文档详细介绍了在Ubuntu 22.04系统上从源码编译安装FreeSWITCH的完整流程。主要内容包括:1)系统环境准备和依赖库安装;2)关键依赖库spandsp和sofia-sip的编译安装;3)FreeSWITCH源码的特定版本(v1.6.0)编译配置,包括禁用SignalWire模块的配置方法;4)系统服务配置,包括创建专用用户、设置权限以及配置systemd服务文件。文档特别提供了版本控制说明,确保后期能切换到相同的版本环境,并附有详细的命令操作步骤和注意事项。

唯有代码让我痴狂 1370

C#图解教程 第十八章 枚举器和迭代器

枚举器和迭代器枚举器和可枚举类型第12章中,我们看到可以用foreach语句遍历数组。在本章,我们会进一步探讨数组,来看看为什么它们可以被foreach语句处理。我们还会研究如何使用迭代器为用户自定义类增加该功能。foreach语句数组foreach语句为我们依次取出数组中的每个元素。int[] arr1={10,11,12,13}; foreach(int item in arr1) { ...

HJH's Blog 643

UE5动画革命:如何用Motion Matching技术让你的游戏角色动作更流畅(附实战配置)

本文深入解析了UE5中Motion Matching技术的实战配置与应用。通过对比传统动画状态机的局限,详细阐述了如何构建动画数据库、在UE5中配置Pose Search Database及动画蓝图,并探讨了与IK融合、性能优化等进阶策略。该技术能显著提升游戏角色动作的流畅度与真实感,是下一代动画解决方案的核心。

weixin_29075633的博客 862

一种基于机载LiDAR点云电力线自动提取方法

文章目录一、引言二、算法实现2.1实现步骤2.2实现代码 一、引言 二、算法实现 2.1实现步骤 (1)首先采用首先采用高程滤波方法去除地面点和低矮地物点,滤波后的点云数据中除电力线点云外还含部分杆塔点、高植被点和噪声点。 (2)根据点云空间维度特征提取电力线点,使用空间密度聚类的方法实现单根电力线精确分离。 2.2实现代码 在这里插入代码片 ...

dayuhaitang1的博客 5172

C#专题-导读:C#语言学习纲要

在ASP专题完成之际,本人接下来将对现在流行的语言C#组织一个专题。这个专题分成上下篇二大部分。    第一部分为C#语言学习    第二部分为C#.NET网络核心编程。    敬请大家与我共同学习,一起进步。另外,由于本人也是初开始讲授这门课,如有什么不到位的地方,还请大家指正。以下为C#语言学习纲要:第一章C#介绍1.1 C#简介http://softbbs.pconline.com.cn/9

思多雅天行健 639

【Mode】多模干涉仪的设计 Multi-mode interferometer(MMI)

与 Splitter 器件一样,MMI 器件也是一种常见的分光器件,可以根据用户的需求将光束分成不同的比例。本文,我们将介绍如何仿真 MMI 器件。这里我们使用的是 1x2 MMI,其本质上是由四个部分组成的,中间的矩形多模式干涉区域以及左右两侧的三个 taper 模式转换区域。之前的教程中我们也提及了,为了获取稳定的模式场分布,通常,我们需要进行模式收敛性扫描。这里以官网给出的案例为例。如何提取 S 参数我们先暂时不做介绍,后续有时间了我们再做介绍。

u011699626的博客 1214

C#学习日志(11)

昨天不知怎么回事,登录上以后点击写新文章打不开,所以昨天没写,今天一起了。 今天看到第十八章379页; 学到的知识: 14,15章的没仔细看,讲的数据库的知识,感觉C#不提供数据库连接的控件很麻烦,不像delphi很简单就连接了; 接口感觉就是特殊的类,没啥讲的,一看就懂

@的博客 315

SAP 交货成本(运费)

交货成本: 业务场景: 有些产品或供应商,会产生交货成本(运费、关税等) 业务模拟(以运费为例): 1、运费在采购订单体现:计划运费 ME21N创建采购订单,并且包含运费: MIGO收货时: 由上可知,MIGO时运费最终体现在库存(存货)科目中(V),或者价格差异中(S计价时)。 MIRO发票校验: 运费最终体现在单独科目中: 后台配置: 运费在发票时候...

willieyuan的博客 1万+

火焰烟雾识别系统【数据集+源码+UI界面】

数据集准备:收集并标注火焰与烟雾数据。YOLOv10训练:训练YOLOv10模型来识别火焰和烟雾。实时检测:通过摄像头视频流进行实时检测,并显示检测结果。UI界面设计:用Tkinter设计简易界面,显示检测结果。完成以上步骤后,可以实现一个完整的火焰烟雾识别系统,具备实时检测与友好的用户界面。

2201_76125393的博客 1135

C# 编程零基础入门指南(四)

在本章中,您学习了几个高级条件的示例。您从所谓的条件运算符(?)开始,它也被称为三元运算符,因为它与三个值一起工作。根据指定条件(第一个值,在问号之前)的满足情况,操作符的“工作”结果要么是yesValue(第二个值,在问号和冒号之间),要么是noValue(第三个值,在冒号之后)。对于某些类型的if-else情况,条件操作符是一种合适的快捷替代方式。汇总求值的中间任务是一种对你所学的关于条件执行的所有东西的回顾。在这里,您遇到了各种测试和许多复合条件,以及使用!操作符的否定。

龙哥盟 970

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C#学习笔记(十三)枚举器和迭代器

第十八章 IEnumerator接口:实现了IEnumerator接口的枚举器有三个函数成员:Current、MoveNext和Reset;Current返回当前位置的属性,它是只读属性;MoveNext前进位置到下一项,如果新的位置是有效的(没有到达序列尾部),返回true,否则返回false,并且在调用Current之前,先调用MoveNext(因为枚举器的原始位置在序列的第一项之前);Re...

khq溪风的博客 777

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

c# uri 取文件名_C#反射与特性(一):反射基础

1. 说明1.1 关于反射、特性在 《C# 7.0 本质论》中,关于这方面的知识在 《第十八章 反射、特性和动态编程》;在《C# 7.0 核心技术指南》中,这部分内容在《第19章 反射和元数据》。[图片来自 《C# 7.0 本质论》]在这里我们可以获得一些关联性很大的技术:反射、特性、元数据;元数据:C# 编写的程序编译成一个程序集,程序集会包含元数据、编译代码和资源。元数据包含内容:程...

weixin_32407987的博客 160

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Task C# 多线程和异步模型 TPL模型 【C#】43. TPL基础——Task初步 22 C# 第十八章 TPL 并行编程 TPL 和传统 .NET 异步编程一 Task.Delay(...

Task C# 多线程和异步模型 TPL模型 Task,异步,多线程简单总结 1,如何把一个异步封装为Task异步 Task.Factory.FromAsync 对老的一些异步模型封装为Task TaskCompletionSource 更通用,在回调中只要SetResult()一下就表示Task结束了,用它可以将各种异步回调封装为Task 2,一...

506

C# 第十八章(XML 文件委托)

1. 单例模式 在已经打开某个窗口时,再想打开 出来的还是之前的已经打开的窗口 方法:(1)两个窗体,A,B 假设点击B打开A ,那么就要在B的打开按钮中,添加打开A的事件: Form1 example = Form1.GetSingle(); example.Show(); (2)被打开的窗体A,要设置一个本窗体的变量public static Form1 frmSingle = n...

czx1826488201的博客 264

C# 设计模式:第十八章 - 行为型模式 之 访问者模式(Visitor Pattern)

访问者模式是一种行为型设计模式,它允许你在不修改对象结构的情况下,定义新的操作。通过访问者模式,你可以将算法与对象结构分离,使得你可以在不改变对象结构的前提下,为对象结构中的元素添加新的操作。访问者模式的核心思想是将操作从对象结构中分离出来,交给外部的“访问者”来执行。在这章中,我们学习了访问者模式的基本概念、应用场景、实现方法以及注意事项。访问者模式允许你在不修改对象结构的情况下,定义新的操作。文件系统操作:如遍历文件系统中的文件和文件夹,并对它们执行不同的操作(如复制、删除、压缩等)。图形绘制。

caifox的博客 1105

C#反射与特性(一):反射基础

1. 说明1.1 关于反射、特性在 《C# 7.0 本质论》中,关于这方面的知识在 《第十八章 反射、特性和动态编程》;在《C# 7.0 核心技术指南》中,这部分内容在《第19章 反射和...

dotNET跨平台 661

C#从入门到精通(第四版)学习记录-- 第17(抽象类、抽象方法)、18章(迭代器、分布类)

C#从入门到精通(第四版)学习记录-- 第17(抽象类、抽象方法)、18章(迭代器、分布类)

qq_34552942的博客 373
上一篇: 【C#基础学习】第十七章、数组
下一篇: C#常见问题——方法签名是什么?
Ohrkaninchen
博客等级 码龄5年 18粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ohrkaninchen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值