C# 接口 interface

https://www.bilibili.com/video/BV1584y1B7xe/

C#中,接口(Interface)是一种引用类型,它定义了一组方法的契约,但不包含实现。接口允许不同的类实现相同的方法集,从而使它们可以以一致的方式被其他代码使用。接口在C#编程中扮演着非常重要的角色,它们是实现多态性的关键方式之一,同时也是实现代码解耦和增强代码可维护性的重要工具。

抽象类是对类的抽象,接口是对行为的抽象

接口只做行为进行约定而没有提供任何实现,因此不受只能单继承的限制

组合优于继承

接口

接口可以看作是一个约定,其中定义了类或结构体继承接口后需要实现功能,接口的特点如下所示:

接口是一个引用类型,通过接口可以实现多重继承;
接口中只能声明"抽象"成员,所以不能直接对接口进行实例化;
接口中可以包含方法、属性、事件、索引器等成员;
接口名称一般习惯使用字母“I”作为开头(不是必须的,不这样声明也可以);
接口中成员的访问权限默认为 public,
所以我们在定义接口时不用再为接口成员指定任何访问权限修饰符,
否则编译器会报错;
在声明接口成员的时候,不能为接口成员编写具体的可执行代码,
也就是说,只要在定义成员时指明成员的名称和参数就可以了;
接口一旦被实现(被一个类继承),派生类就必须实现接口中的所有成员,
除非派生类本身也是抽象类。

接口声明

C# 中声明接口需要使用 interface 关键字,语法结构如下所示:

public interface InterfaceName{returnType funcName1(type parameterList);returnType funcName2(type parameterList);... ...
}

其中,InterfaceName 为接口名称,returnType 为返回值类型,funcName 为成员函数的名称,parameterList 为参数列表。

接口继承

如果一个接口继承其他接口,那么实现类或结构就需要实现所有接口的成员。

using System;namespace c.biancheng.net
{public interface IParentInterface{void ParentInterfaceMethod();}public interface IMyInterface : IParentInterface{void MethodToImplement();}class Demo : IMyInterface{static void Main(string[] args) {Demo demo = new Demo();demo.MethodToImplement();demo.ParentInterfaceMethod();}public void MethodToImplement(){Console.WriteLine("实现 IMyInterface 接口中的 MethodToImplement 函数");}public void ParentInterfaceMethod(){Console.WriteLine("实现 IParentInterface 接口中的 ParentInterfaceMethod 函数");}}
}

Number

class ComplexNumber: IShow {//私有成员 实部和虚部private double Real;private double Imaginary;//get setpublic double real {get { return Real; }set { Real = value; }}public double imaginary {get { return Imaginary; }set { Imaginary = value; }}//含参构造public ComplexNumber(double re = 0.0, double im = 0.0) {real = re;imaginary = im;}~ComplexNumber() { }//运算符重载public static ComplexNumber operator +(ComplexNumber a, ComplexNumber b) {ComplexNumber c = new ComplexNumber(0, 0);c.real = a.real + b.real;c.imaginary = a.imaginary + b.imaginary;return c;}//链式调用public ComplexNumber linkA(out double re) {re = real;return this;}public ComplexNumber linkB(out double im) {im = imaginary;return this;}public void showNumber() {System.Console.Write("{0} + {1}i", real, imaginary);}}class QNumber: IsayName {private int Qnumber;public int qnumber {get { return Qnumber; }set {if(value < 0) {value = 0;}Qnumber = value;}}public QNumber() : this(0) { }public QNumber(int qnum) {qnumber = qnum;}public static QNumber operator +(QNumber a, QNumber b) {QNumber c = new QNumber();c.qnumber = a.qnumber * b.qnumber + 100;return c;}public static QNumber operator -(QNumber a, QNumber b) {QNumber c = new QNumber();c.qnumber = a.qnumber - b.qnumber;if(c.qnumber < 0) { c.qnumber = 0; }return c;}public void showNumber() {System.Console.Write(qnumber);}public void sayName() {System.Console.Write("{0}", GetType().Name);}
}interface IShow {void showNumber();
}interface IsayName: IShow {void sayName();
}

Program

using System;//主程序入口
class TODO {static void Main() {//Console.WriteLine("Hello C#!");//ComplexNumber a = new ComplexNumber(1, 2);//ComplexNumber b = new ComplexNumber(2, 5);//ComplexNumber c = new ComplexNumber();//c = a + b;//Console.WriteLine("c = {0} + {1}i",//    c.real, c.imaginary);//double rea, imb;//c.linkA(out rea).linkB(out imb);//Console.WriteLine("rea = {0}, imb = {1}", rea, imb);QNumber v = new QNumber(20);QNumber m = new QNumber(25);QNumber s = m - v;s.showNumber();System.Console.WriteLine();s.sayName();}
}

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

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

相关文章

面试经验分享 | 蓝队面试经验

关于蓝队面试经验 1.自我介绍能力 重要性 为什么将自我介绍能力放在第一位&#xff0c;实际上自我介绍才是面试中最重要的一点&#xff0c;因为护网面试并没有确定的题目&#xff0c;让面试官去提问 更多是的和面试官的一种 “交谈” &#xff0c;面试的难易程度也自然就取决…

【第三方登录】Twitter

创建应用 APPID 和 相关回调配置 重新设置api key 和 api secret 设置回调和网址 还有 APP的类型 拿到ClientID 和 Client Secret 源码实现 获取Twitter 的登录地址 public function twitterUrl() {global $db,$request,$comId;require "inc/twitter_client/twitte…

Springboot整合瀚高

需要下载highgo驱动,然后将jar包打入进自己本地maven中 下载地址: highgi6.2.4 1.打开jar包所在的文件&#xff0c;然后在该文件夹中打开命令窗口&#xff08;或者先打开命令窗口&#xff0c;然后cd到jar所在文件夹&#xff09; install-file -Dfile&#xff1a;jar包名Dart…

腾讯VS网易:一场不见终局的游戏未来之战

国内游戏霸主腾讯最近赚足了眼球。 总体上看&#xff0c;腾讯手握“游戏社交”两大王牌&#xff0c;最近发布的财报十分亮眼&#xff0c;其2023年总营收和净利润分别同比增长10%和36%&#xff0c;展现了互联网巨头的强劲活力。 然而巨头亦有焦虑&#xff0c;增值服务营收同比…

FASTAPI系列 14-使用JSONResponse 返回JSON内容

FASTAPI系列 14-使用JSONResponse 返回JSON内容 文章目录 FASTAPI系列 14-使用JSONResponse 返回JSON内容前言一、默认返回的JSON格式二、JSONResponse 自定义返回三、自定义返回 headers 和 media_type总结 前言 当你创建一个 FastAPI 接口时&#xff0c;可以正常返回以下任意…

Prompt Engineering的4 种方法

此为观看视频 4 Methods of Prompt Engineering 后的笔记。 从通用模型到专用模型&#xff0c;fine tuning&#xff08;微调&#xff09;和prompt engineering&#xff08;提示工程&#xff09;是2种非常重要的方法。本文深入探讨了prompt engineering的4种方法。 首先&#…

23届嵌入式被裁,有什么好的就业建议?

最近看到了一个提问&#xff0c;原话如下&#xff1a; 本人23届毕业生&#xff0c;就业方向嵌入式软件&#xff0c;坐标深圳&#xff0c;工作3月公司裁员&#xff0c;目前接近12月开始找工作。 boss上投递简历&#xff0c;校招岗&#xff0c;比较有规模的好公司基本已读不回&am…

OM6626一款低功耗蓝牙芯片SOC芯片 -电子价签蓝牙芯片

OM6626是一个功耗优化的SOC芯片&#xff0c;它具有低能耗和专有的2.4ghz应用。它集成了一个高性能和低功耗的射频收发器与蓝牙基带和丰富的外设扩展。OM6626还集成了PMU (power management unit)&#xff0c;提供高效的电源管理。它的目标是24ghz蓝牙低能耗系统、专有2.4ghz系统…

你的 Python 代码需要解释一下了!

Python 是一种相对简单的编程语言。它主要以解释型语言著称&#xff0c;这意味着每行代码都要通过解释器逐行执行。不过在某些时候&#xff0c;将 Python 代码翻译成计算机可以理解的内容&#xff0c;然后再逐行执行&#xff0c;可以减少繁琐。 在这种情况下&#xff0c;编译器…

VRAY渲染设置大神参数(建议收藏)

3dmax效果图云渲染平台——渲染100以3ds Max 2024、VR 6.2、CR 11.2等最新版本为基础&#xff0c;兼容fp、acescg等常用插件&#xff0c;同时LUT滤镜等参数也得到了同步支持。注册填邀请码【7788】可领30元礼包和免费渲染券哦~ 公用&#xff1a;输出大小&#xff1a;一般小图50…

【测试篇】软件测试的基本概念

什么是需求什么是bug什么是测试用例开发模型和测试模型 什么是需求 需求定义&#xff1a;包含用户需求和软件需求 用户需求&#xff1a;可以简单理解为甲方提出的需求&#xff0c;如果没有甲方&#xff0c;那么就是终端用户使用产品时必须要完成 的任务。 软件需求&#xff1…

小白一次过软考高级(信息系统项目管理师)秘籍,请收藏!!!

作为一位软考老司机&#xff0c;我觉得我还是有资格说一说的。 我的考试成绩&#xff1a; 高级软考考试基础信息&#xff1a; 考试科目&#xff1a;总共分为3科&#xff0c;综合知识、案例分析、论文 成绩&#xff1a;满分75分&#xff0c;45分及格&#xff0c;需同时通过3科…

正则表达式 vs. 字符串处理:解析优势与劣势

title: 正则表达式 vs. 字符串处理&#xff1a;解析优势与劣势 date: 2024/3/27 15:58:40 updated: 2024/3/27 15:58:40 tags: 正则起源正则原理模式匹配优劣分析文本处理性能比较编程应用 1. 正则表达式起源与演变 正则表达式&#xff08;Regular Expression&#xff09;最早…

LangChain入门:3.调用OpenAI的聊天机器人-入门

内容 本次入门内容是调用OpenAI的聊天机器人功能。 实现原理是使用OpenAI提供的API&#xff0c;通过向其发送请求来生成回复文本。 首先&#xff0c;导入ChatOpenAI类&#xff0c;这个类是用于实现与OpenAI聊天机器人交互的。 pip install langchain-openai2. 编写调试代码 …

python基于django的高校迎新系统 flask新生报到系统

系统的登录界面和业务逻辑简洁明了&#xff0c;采用一般的界面窗口来登录界面,整个系统更加人性化&#xff0c;用户操作更加简洁方便。本系统在操作和管理上比较容易&#xff0c;还具有很好的交互性等特点&#xff0c;在操作上是非常简单的。因此&#xff0c;本系统可以进行设计…

Go——结构体

Go语言中没有类的概念&#xff0c;也不支持类的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。 一. 类型别名和自定义类型 1.1 自定义类型 在Go语言中有一些基本的数据类型&#xff0c;如string&#xff0c;整型&#xff0c;…

XGB-24:使用Scikit-Learn估计器接口

概览 除了原生接口之外&#xff0c;XGBoost还提供了一个符合sklearn估计器指南的sklearn估计器接口。它支持回归、分类和学习排名。sklearn估计器接口的生存训练仍在进行中。 你可以在使用sklearn接口的示例集合中找到一些快速入门示例。使用sklearn接口的主要优势在于&#x…

聚道云助力:易快报CDP无缝对接,登录同步一步到位!

一、客户介绍 某企业咨询有限公司是一家专注于为企业提供全方位、高质量咨询服务的领先机构。该公司致力于将先进的管理理念和实践经验与企业实际需求相结合&#xff0c;助力企业实现可持续发展。无论是战略规划、组织优化、人力资源管理&#xff0c;还是市场营销、财务管理等…

GEE:将分类特征和标签提取到样本点,并以(csv/shp格式)下载到本地

作者:CSDN @ _养乐多_ 本文将介绍在Google Earth Engine(GEE)平台上,下载用于机器学习分类或者回归的样本点数据,样本点数据携带了分类特征和标签信息,可以以csv格式或者SHP格式。 结果如下图所示, 文章目录 一、核心函数1.1 采样1.2 下载函数二、代码链接三、完整代码…

【医疗器械方案】红外额温枪应用方案

红外额温枪作为一款红外测温的电子产品&#xff0c;最开始是用于工业测温&#xff0c;但随着时代的发展&#xff0c;逐渐的发展为医疗行业使用。红外额温枪最核心的功能就是对人体做实时测温&#xff0c;并且可以在不接触人体情况下直接测温&#xff0c;这种功能在疫情期间尤为…