【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

HDLBits答案汇总

前言 该博客为本人做HDLBits习题时的心得记录总结,欢迎大家一起交流进步。 HDLBits网站链接 Verilog Language Basics Vectors Modules:Hierarchy Procedures More Verilog Features Circuits Combinational Logic Basic gates Multiplexers Arithmetic Circuits Karnaugh Map to Circuit Sequential Logic Latche

谦豫 9万+

【嵌入式原理系列-第七篇】ld脚本实战:从零构建MCU内存布局

本文是一篇针对嵌入式开发者的实战指南,详细讲解了如何从零开始为MCU编写ld链接器脚本以构建自定义内存布局。文章以STM32F103C8T6为例,深入剖析了MEMORY和SECTIONS指令的用法,并提供了OTA分区、非易失数据存储等高级定制案例,帮助开发者解决实际工程中的Flash与RAM管理难题,实现对程序运行的深度掌控。

weixin_29271263的博客 249

C#学习笔记

C#学习笔记

xfeng20的博客 275

从隐式求解器到显式求解器:COMSOL接触仿真中的求解策略对比与选择

本文深度解析了COMSOL中隐式与显式求解器在接触仿真中的应用与选择策略。针对非线性接触问题的核心挑战,详细对比了两种求解器的数学框架、优化技术及适用场景,并提供了参数调优和调试技巧,帮助工程师高效解决接触仿真中的收敛问题。

weixin_28347369的博客 682

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

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

HJH's Blog 643

Altium Concord Pro 的应用范围,安装,和使用范围

Altium Concord Pro 的应用范围,安装,和使用范围。保证满足两者软件的最低安装要求。 Altium Concord Pro 是配合Digapcb,和MCAD,Altium 和相应机械设计软件的基础和交换桥梁

hanzhaos的博客 1121

小红书UID泄露风险揭秘:如何防止你的手机号被社工库关联(附防护指南)

本文揭示了小红书UID泄露的严重风险,详细解析了UID与手机号关联后被社工库利用的完整链条。通过分析黑产的数据整合技术,提供从基础到进阶的防护策略,包括密码管理、账号隔离和应急响应措施,帮助用户有效防范个人信息泄露风险。

ol789012345的博客 1515

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

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

思多雅天行健 639

YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑)

YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑)

weixin_55249340的博客 3万+

C#学习日志(11)

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

@的博客 315

GBT 27930-2015/2023国标充电协议A类CAN报文ID说明

国标充电CAN的ID,仅供学习参考。

qqq080的博客 7814

道路场景分割:车道线、可行驶区域与路沿检测

道路场景分割:车道线、可行驶区域与路沿检测​ ,人工智能,计算机视觉,大模型,AI,文章围绕道路场景分割展开,涵盖车道线、可行驶区域与路沿检测。介绍了基本概念、重要性,各部分检测的类型、方法、难点及解决思路,还涉及技术融合、数据集、评价指标、发展趋势、应用案例、代码示例、不同天气处理、实际问题与方案、实现流程、相关技术工具、教育研究应用、产业前景、伦理安全问题及学习资源等,全面阐述了道路场景分割的多方面内容,为相关学习和研究提供了丰富信息。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

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

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

龙哥盟 970

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

khq溪风的博客 777

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

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

weixin_32407987的博客 160

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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、付费专栏及课程。

余额充值