三、C#面向对象编程(接口与实现)
在C#中,接口是一种定义方法但不包含实现的方式,可以被多个类实现以支持不同的行为。通过接口,我们可以定义一组标准的成员,让类遵循特定的契约。
下面是一个关于接口和实现的简单示例:
// 定义一个接口
public interface IAnimal
{void Speak();
}// 实现接口的类
public class Dog : IAnimal
{public void Speak(){Console.WriteLine("Woof!");}
}public class Cat : IAnimal
{public void Speak(){Console.WriteLine("Meow!");}
}
在这个例子中,我们定义了一个名为IAnimal
的接口,它有一个Speak
方法。然后,我们创建了两个类Dog
和Cat
,它们都实现了IAnimal
接口,并提供了Speak
方法的具体实现。这样,我们可以让不同的动物类遵循相同的契约,即它们都必须实现Speak
方法。
通过接口,我们可以编写更灵活的代码。例如,我们可以编写一个接受IAnimal
类型的参数的方法,并在方法内部调用Speak
方法。这样,我们可以传入任何实现了IAnimal
接口的对象,而不需要关心具体的类类型。
public void MakeAnimalSpeak(IAnimal animal)
{animal.Speak();
}
在这个例子中,MakeAnimalSpeak
方法接受一个IAnimal
类型的参数,并调用其Speak
方法。由于Dog
和Cat
类都实现了IAnimal
接口,我们可以将它们作为参数传递给这个方法。
除了上述提到的接口实现,C# 还支持多个接口的继承,一个类可以实现多个接口。例如:
public interface IAnimal
{void Speak();
}public interface IPet
{void Play();
}public class Dog : IAnimal, IPet
{public void Speak(){Console.WriteLine("Woof!");}public void Play(){Console.WriteLine("Fetch!");}
}
在这个例子中,Dog
类实现了两个接口 IAnimal
和 IPet
,并提供了相应的方法实现。这样,Dog
类不仅遵循了 IAnimal
的契约,还遵循了 IPet
的契约。通过这种方式,我们可以将相关的行为组织在一起,并通过接口来定义这些行为。
此外,C# 还支持接口的继承,一个接口可以继承另一个接口的方法和属性。例如:
public interface IAnimal
{void Speak();
}public interface IPredator : IAnimal
{void Hunt();
}
在这个例子中,IPredator
接口继承了 IAnimal
接口的 Speak
方法,并添加了一个新的方法 Hunt
。任何实现 IPredator
接口的类都必须实现 Speak
和 Hunt
方法。通过接口的继承,我们可以构建具有层次结构的接口,以更好地组织相关的行为。
接口的继承不仅可以帮助我们构建具有层次结构的接口,还可以提供更好的代码组织和复用。当我们需要添加新的行为时,可以通过继承现有的接口来扩展其功能,而不是重新定义一个新的接口。
此外,C# 还支持抽象类实现接口。抽象类可以包含抽象成员和具体成员,它可以被继承并实现其抽象成员。通过抽象类实现接口,我们可以将接口的实现逻辑封装在抽象类中,使得实现更加灵活和可复用。
下面是一个示例,演示如何使用抽象类实现接口:
public interface IAnimal
{void Speak();
}public abstract class AnimalBase : IAnimal
{public abstract void Speak();
}public class Dog : AnimalBase
{public override void Speak(){Console.WriteLine("Woof!");}
}
在这个例子中,我们定义了一个接口 IAnimal
和一个抽象类 AnimalBase
,它实现了 IAnimal
接口。然后,我们创建了一个 Dog
类,它继承了 AnimalBase
类并实现了 Speak
方法。通过这种方式,我们可以将 IAnimal
接口的实现逻辑封装在 AnimalBase
抽象类中,使得 Dog
类可以更加专注于自己的特定行为。
相关文章:
三、C#面向对象编程(接口与实现)
在C#中,接口是一种定义方法但不包含实现的方式,可以被多个类实现以支持不同的行为。通过接口,我们可以定义一组标准的成员,让类遵循特定的契约。 下面是一个关于接口和实现的简单示例: // 定义一个接口 public inter…...
【java爬虫】股票数据获取工具前后端代码
前面我们有好多文章都是在介绍股票数据获取工具,这是一个前后端分离项目 后端技术栈:springboot,sqlite,jdbcTemplate,okhttp 前端技术栈:vue,element-plus,echarts,ax…...
Scikit-Learn线性回归(四)
Scikit-Learn线性回归四:梯度下降 1、梯度下降1.1、梯度下降概述1.2、梯度下降及原理1.3、梯度下降的实现2、梯度下降法求解线性回归的最优解2.1、梯度下降法求解的原理2.2、梯度下降法求解线性回归的最优解2.3、梯度下降法求解线性回归案例(波士顿房价预测)3、Scikit-Learn…...
SCT2330C——3.8V-28V输入,3A,低EMI,超低功耗同步降压DCDC转换器
描述: SCT2330C是3A同步buck变换器,输入电压范围高达28V,完全集成了80mΩ高压侧MOSFET和42mΩ低压侧MOSFET,提供高效降压DC-DC转换。SCT2330C采用峰值电流模式控制,集成补偿网络,通过最小化片外元件数量&a…...
php生成唯一ID的5种方法介绍
php生成唯一ID的5种方法介绍 工作中使用到唯一ID的场景非常多,如临时缓存文件、临时变量、临时安全码等。 uniqid()函数基于以微妙计的当前时间,生成一个唯一的ID。由于生成唯一ID与微妙时间关联,因此生成ID的唯一性非常可靠。 生成的唯一…...
向日葵远程工具安装Mysql的安装与配置
目录 一、向日葵远程工具安装 1.1 简介 1.2 下载地址 二、Mysql 5.7 安装与配置 2.1 简介 2.2 安装 2.3 初始化mysql服务端 2.4 启动mysql服务 2.5 登录mysql 2.6 修改密码 2.7 设置外部访问 三、思维导图 一、向日葵远程工具安装 1.1 简介 向日葵远程控制是一款用…...
Unity 欧盟UMP用户隐私协议Android接入指南
Unity 欧盟UMP用户协议Android接入指南 官方文档链接开始接入mainTemplate.gradle 中引入CustomUnityPlayerActivity 导入UMP相关的包java类中新增字段初始化UMPSDK方法调用![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d882171b068c46a1b956e80425f3a9cf.png)测…...
AutoLisp入门教程
AutoLisp入门教程 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在编程的世界里,有许多领域和语言需要我们去探索,今天我们将聚焦于 AutoLI…...
matplotlib颜色合集——各种常见简单图形(上)
一、.颜色配图表 图文颜色引用:建站教程 - FINTHON 二、折线图 jupyter notebook 简介plot() 2.1折线图参数 plt.plot(*args, scalexTrue, scaleyTrue, dataNone, **kwargs) 2.2、参数介绍 x:X轴数据,列表或数组,可选。 y&a…...
小H靶场笔记:DC-3
DC-3 January 3, 2024 4:11 PM Tags:Joomla owner:只惠摸鱼 信息收集 探测靶机ip: 192.168.199.133 nmap 扫描端口、 系统版本 漏洞 发现只有80端口开发, 且有cve-2017-8917漏洞存在是Joomla的SQL注入漏洞 Joomla版本为3.7.0…...
Web网页开发-CSS高级技巧2-笔记
1.已知宽高垂直水平居中 定位负margin法: 利用top:50%;left:50%;margin-left:子盒子宽度的一半;margin-top:子盒子高度的一半; 2.不定宽高垂直水平居中 兼容性最好的方案: 用定位margin:auto,定位 四个方向的值相等margin:auto…...
C++面向对象语法总结(二)
目录 《C基础语法总结》《C面向对象语法总结(一)》 十一、继承 继承,可以让子类拥有父类的多有成员(变量、函数)如下面的代码:Student是子类(subclass,派生类),Person是父类&…...
【LeetCode每日一题】2487. 从链表中移除节点(调用栈+递归+翻转链表)
2024-1-3 文章目录 [2487. 从链表中移除节点](https://leetcode.cn/problems/remove-nodes-from-linked-list/)方法一:调用栈方法二:递归方法三:翻转链表 2487. 从链表中移除节点 方法一:调用栈 1.将所有节点按顺序压入栈中 2.从…...
开源协助平台工程灵活应对多云时代的挑战
平台工程通过标准化控制和灵活性保障了开发实践。但是,随着平台工程的兴起,开源战略又该如何融入其中呢? 虽然平台工程没有一刀切的方法,但越来越明显的是,开源软件和技术对平台工程的成功绝对至关重要——这一点我将在…...
Springboot通过profiles切换不同环境使用的配置
文章目录 简介1.通过分隔符隔离2.通过使用不同的配置文件区分3.测试 简介 一个项目从开发到上线一般要经过几个环境, dev测试环境-uat预生产环境-prod生产环境,每个环境的使用的数据库或者配置不同,这时候可以通过下面两种方式区分配置,达到快速切换的效…...
SpringBoot入门到精通-Spring Boot Jasypt Encrypt 演示
这是 spring boot 应用程序,展示了如何使用 Jasypt 加密值。 关于Jasypt Jasypt 为您提供简单的单向(摘要)和双向加密技术。开放 API,可与任何 JCE 提供程序一起使用,而不仅仅是默认的 Java VM 提供程序。Jasypt 可以很容易地与 Bouncy Castle 等知名提供商一起使用。了解…...
整数的阶乘(英语:factorial)是所有小于及等于
整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,0的阶乘为1。即:n!123...n。 实例 #!/usr/bin/python3 # Filename : test.py # author by : www.dida100.com # 通过用户输入数字计算阶乘 # 获…...
音视频通信
文章目录 一、音视频通信流程二、流媒体协议1、RTSP2、RTMP3、HLS4、WebRTC 一、音视频通信流程 音视频通信完整流程有如下几个环节:采集、编码、前后处理、传输、解码、缓冲、渲染等。 每一个细分环节,还有更细分的技术模块。比如,前后处…...
docker 搭建gitlab 恢复和备份
最近一直在折腾gitlab 代码管理系统 采用docker搭建 镜像网址 https://hub.docker.com/ 技术交流 http://idea.coderyj.com/ 1.因为我要恢复的版本是12.0.9的所有我就下载了docker-ce的12.0.9的镜像 1.下载镜像 docker pull gitlab/gitlab-ce:12.0.9-ce.02.安装 docker run …...
尚硅谷2023版Promise教程从入门到实战(讲师:任安萍)
一、前言:为什么会出现Promise? Promise的重要性我认为没有必要多讲,概括起来说就是五个字:必!须!得!掌!握!。 而且还要掌握透彻,在实际的使用中,有非常多…...
【SpringBoot】分组校验和自定义校验
分组检验 参数校验时,我们希望不同的方法参数校验规则不同,这时就需要分组校验。 public class Category {NotNull(groups Update.class)private Integer id;//主键IDNotEmptyprivate String categoryName;//分类名称// NotEmpty(groups {Add.class,…...
19、BLIP-2
简介 github 通过利用预训练的视觉模型和语言模型来提升多模态效果和降低训练成本,预训练的视觉模型能够提供高质量的视觉表征,预训练的语言模型则提供了强大的语言生成能力。 实现过程 为了弥合模态差距,提出了一个分两个阶段预训练的 Qu…...
【微服务核心】MyBatis Plus
文章目录 1. 简介2. 入门使用3. 核心功能3.1 CRUD 接口3.1.1 Mapper CRUD 接口3.1.2 Service CRUD 接口 3.2 条件构造器3.3 分页插件3.4 Mybatis-Plus 注解 4. 拓展4.1 逻辑删除4.2 MybatisX快速开发插件 5. 插件5.1 [分页插件](#page)5.2 乐观锁插件 1. 简介 MyBatis Plus&am…...
什么是Alibaba Cloud Linux?完全兼容CentOS,详细介绍
Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版,针对阿里云服务器ECS做了大量深度优化,Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS,Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…...
Spark---RDD算子(单值类型Value)
文章目录 1.RDD算子介绍2.转换算子2.1 Value类型2.1.1 map2.1.2 mapPartitions2.1.3 mapPartitionsWithIndex2.1.4 flatMap2.1.5 glom2.1.6 groupBy2.1.7 filter2.1.8 sample2.1.9 distinct2.1.10 coalesce2.1.11 repartition2.1.12 sortBy 1.RDD算子介绍 RDD算子是用于对RDD进…...
数据库中的MVCC--多版本并发控制
一、前言 1、定义:MVCC(Multi-Version Concurrency Control),多版本并发控制,主要为了提高数据库 的并发性能。是MySQL的InnoDB存储引擎实现隔离级别的一种具体方式。用于实现提交读和可重 复读这两种隔离级别。 2…...
wps将姓名处理格式为:姓**
1.打开wps,在要处理数据右侧一个单元格 输入公式:LEFT(A1,1)&"**",然后回车 2.按住ctrl和处理好的数据的右下角小方框,往下拖动即可生成格式为:姓** 格式的数据 3.复制生成的数据,右键选择 “…...
2023年我的编程之旅:技术演进与自我成长的纪录
2023年我的编程之旅:技术演进与自我成长的纪录 转眼间,2023年已经悄然走到了尾声。这一年,对我来说既是挑战也是机遇的一年。我的编程之旅如同坐上了一辆高速前进的列车,从新技术的学习探索到项目实战的沉浸经历,再到…...
好用免费的WAF---如何安装雷池社区版
什么是雷池 雷池(SafeLine)是长亭科技耗时近 10 年倾情打造的 WAF,核心检测能力由智能语义分析算法驱动。 Slogan: 不让黑客越雷池半步。 什么是 WAF WAF 是 Web Application Firewall 的缩写,也被称为 Web 应用防火墙。 …...
看似 bug 又非 bug 的一个 bug
最近的一个项目中,对于 CSS 的一些属性一些选择符可以大胆使用,然后很意外得撞上一个 iOS 中 Safari 的一个解析问题。 <Component style{{height: "calc(100vh - 46px)"}}>一个组件</Component> 这样的一段代码很简单ÿ…...
婚庆网站模板免费下载/电子商务网店运营推广
Python中多态的作用 让具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容(功能)的函数。 Python中多态的特点 1、只关心对象的实例方法是否同名,不关心对象所属的类型; 2、对象所属的类之间,继承关系…...
私做政府网站什么罪/深圳网络推广优化
【来信】 贺老师你好,我是一名普通二本网络工程专业的大三学生。眼看着大三上学期又要结束了,非常的焦虑。之前一直没有好好学习,学的东西少之又少,大三下学期结束就要开始找实习了。学校开了java基础课程,这学期就…...
南阳做网站公司哪家好/360网站推广怎么做
PS域和CS域 参考链接:https://zhidao.baidu.com/question/1691360411931618948.html PS域,分组交换(Packet Switch),有时又称分组业务(Packet Service),这是移动通信网络zhi发展的早…...
做网站 融资/今天最新的新闻
一.概述 suite套件,就是多个测试的集合,可以同时测试多个测试类。 二.TestSuite的两种用法 在写用法之前,先做点准备工作。 demo.php <?phpclass Demo{public function add($a, $b){return $a $b; } }业务类&a…...
个人电子邮件注册网站申请/市场监督管理局电话
下载安装 官网下载安装:https://www.sublimetext.com/Package Control:https://packagecontrol.io/官方文档:https://www.sublimetext.com/docs/index.html非官方文档(有很多对官方文档的说明):https://do…...
网络营销管理方案/移动端seo关键词优化
安装rlwrap-0.37.tar.gz工具--实现SQLPLUS中记忆和上下翻页功能在rpm10g32这个路径中1、解压缩[rootoracle3 ~]# cd /u01/rpm10g32[rootoracle3 rpm10g32]# tar -zxvf rlwrap-0.37.tar.gz 2、安装[rootoracle3 rpm10g32]# cd rlwrap-0.37 --root下安装,安装的时候…...