【C#】面向对象的三大特性,还记得吗,简单代码举例回顾
欢迎来到《小5讲堂》
大家好,我是全栈小5。
这是《C#》序列文章,每篇文章将以博主理解的角度展开讲解,
特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!
目录
- 基本概念
- 封装
- 继承
- 多态
- 话题
基本概念
C# 面向对象的三大特性是封装、继承和多态。
-
封装
指将对象的某些内部状态和行为封装起来,只暴露必要的接口供其他对象使用,并且隐藏其实现细节,从而保证了对象的安全性和可维护性。 -
继承
指通过继承一个已有的类来创建一个新类,新类继承了父类的属性和方法,并可以新增或重写一些方法,从而在代码复用和扩展性方面提供了便利。 -
多态
指同一种类型的对象,在不同的情况下,可以有不同的状态和行为。在面向对象编程中,多态通常通过继承和接口实现。
封装
假设Person 类定义了两个私有字段 name 和 age,它们被封装在类的内部,外部无法直接访问。
为了对外提供对这些私有字段的访问和设置,在类中定义了公开的访问器和设置器 (getter 和 setter)。
通过访问器 (getter),可以获取私有字段的值;通过设置器 (setter),可以给私有字段赋值。
这样,可以在类的外部使用这些访问器和设置器来访问和修改私有字段的值,同时可以在访问和设置的过程中加入相应的逻辑控制。
在 Main 方法中,创建了一个 Person 对象,使用设置器给对象的 name 和 age 字段赋值,然后使用 ShowInfo() 方法来展示这些字段的值。
通过封装,将字段的访问和修改限制在了类的内部,避免了直接操作字段的不良影响,并提供了控制和保护字段的能力。
using System;// 定义一个类
class Person
{private string name;private int age;// 公开的访问器和设置器public string Name{get { return name; }set { name = value; }}public int Age{get { return age; }set { age = value; }}// 方法public void ShowInfo(){Console.WriteLine($"姓名:{name},年龄:{age}");}
}class Program
{static void Main(string[] args){Person person = new Person();person.Name = "张三";person.Age = 25;person.ShowInfo(); // 输出:姓名:张三,年龄:25}
}
继承
假设Vehicle 类是一个父类,拥有一个构造函数和一个 ShowInfo() 方法。
Car 类则是 Vehicle 类的子类,通过继承 Vehicle 类,Car 类继承了父类的属性和方法,并添加了自己的私有字段 price 和 ShowPrice() 方法。
在 Main 方法中,创建了一个 Car 对象,并调用了其父类继承的 ShowInfo() 方法和自己添加的 ShowPrice() 方法。
通过继承,可以直接使用父类的代码,减少了重复编写相似代码的工作量,并且可以根据需求在子类中进行功能扩展。
using System;// 定义一个父类
class Vehicle
{protected string brand;protected int year;public Vehicle(string brand, int year){this.brand = brand;this.year = year;}public void ShowInfo(){Console.WriteLine($"品牌:{brand},年份:{year}");}
}// 定义一个子类,继承自父类
class Car : Vehicle
{private int price;public Car(string brand, int year, int price) : base(brand, year){this.price = price;}public void ShowPrice(){Console.WriteLine($"价格:{price}万元");}
}class Program
{static void Main(string[] args){Car car = new Car("奥迪", 2022, 30);car.ShowInfo(); // 输出:品牌:奥迪,年份:2022car.ShowPrice(); // 输出:价格:30万元}
}
多态
假设Animal 类定义了一个虚方法 MakeSound(),并且该方法被派生类 Dog 和 Cat 分别重写了。
当分别使用 Animal、Dog 和 Cat 类型的对象调用 MakeSound() 方法时,根据对象的实际类型,运行时会自动选择适当的方法去执行。
这就是多态的体现,同一种类型的对象在不同的情况下表现出不同的行为。
using System;// 定义一个动物类
class Animal
{public virtual void MakeSound(){Console.WriteLine("动物发出声音");}
}// 定义一个狗类,继承自动物类
class Dog : Animal
{public override void MakeSound(){Console.WriteLine("狗叫:汪汪汪!");}
}// 定义一个猫类,继承自动物类
class Cat : Animal
{public override void MakeSound(){Console.WriteLine("猫叫:喵喵喵!");}
}class Program
{static void Main(string[] args){Animal animal1 = new Animal(); // 创建动物对象Animal animal2 = new Dog(); // 创建狗对象Animal animal3 = new Cat(); // 创建猫对象animal1.MakeSound(); // 输出:动物发出声音animal2.MakeSound(); // 输出:狗叫:汪汪汪!animal3.MakeSound(); // 输出:猫叫:喵喵喵!}
}
话题
面向对象编程有三大特性:封装、继承和多态。
许多编程语言都支持面向对象编程,并提供了对应的特性和机制。
-
Java
Java 是一种广泛使用的面向对象编程语言,它完全支持封装、继承和多态。 -
C++:
C++ 是一种通用编程语言,也支持面向对象编程。它不仅支持封装、继承和多态,还提供了更多高级特性,如模板和运算符重载。 -
Python
Python 是一种简单易学的编程语言,同样支持面向对象编程。它提供了类和对象的概念,以及封装、继承和多态的支持。 -
C#
C# 是微软公司开发的一种面向对象编程语言。它与 Java 类似,支持封装、继承和多态。 -
Ruby
Ruby 是一种动态、脚本化的面向对象编程语言。它非常注重简洁和可读性,同样提供了封装、继承和多态的支持。
除了上述语言,还有许多其他编程语言支持面向对象编程,如JavaScript、PHP、Swift 等。
不同的编程语言可能在语法和使用方式上有所差异,但它们共享面向对象编程的核心概念和特性。
温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。
相关文章:

【C#】面向对象的三大特性,还记得吗,简单代码举例回顾
欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。…...
235.【2023年华为OD机试真题(C卷)】机器人搬砖(二分查找-JavaPythonC++JS实现)
🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解…...
git hooks
介绍 当我们在执行git管理仓库代码时,想规范下每个用户的commit内容?想检查下提交的代码规范?想检查下PR是否通过,那么这个时候就需要用到git hooks,git hooks可以在我们进行git操作的关键时机插入我们想要执行的“脚…...

法规更新美国玩具标准ASTM F963-17有更新,最新标准为ASTM F963-23
美国材料试验协会 (ASTM)在10月13日发布了新的玩具安全标准:ASTM F963-23,ASTM F963-17美国联邦法规16 CFR 1250还在使用当中,出口美国的玩具的厂商要引起重视。 ASTM F963-17是什么标准? ASTM F963-17是美国玩具检测标准&#…...

【grpc】利用protobuf实现java或kotlin调用python脚本,含实现过程和全部代码
前言 在一些特殊场景中,我们可能需要使用java或者其他任意语言调用python脚本或sdk等。本文的需求衍生也不例外于此,python端有sdk,但只能在python中调用,于是就有了本文章。 常见的调用方式如jython、python提供http rest接口、…...

Linux网络 ----- 网络文件共享服务之FTP服务
引言 FTP服务是Internet上最早应用于主机之间进行数据传输的基本服务之一。是目前Internet上使用最广泛的文件传送协议 一、FTP概述 FTP(File TransferProtocol,文件传输协议)是典型的C/S架构的应用层协议,需要由服务端软件、客户端软件两个部分共同实…...

如何避免知识付费小程序平台的陷阱?搭建平台的最佳实践
随着知识经济的兴起,知识付费已经成为一种趋势。越来越多的人开始将自己的知识和技能进行变现,而知识付费小程序平台则成为了一个重要的渠道。然而,市面上的知识付费小程序平台琳琅满目,其中不乏一些不良平台,让老实人…...
第89讲:MySQL数据库迁移方面需要考虑的因素以及XBK企业级备份参数
文章目录 MySQL数据库迁移方面需要考虑的因素1.MySQL数据库迁移方面要考虑的因素2.MySQL5.6升级到5.7版本的方法3.MySQL迁移到其他数据库的方法4.为什么要从XBK备份中还原某张表的数据5.从XBK备份中还原某张表的数据6.XtrBackup企业级备份参数 MySQL数据库迁移方面需要考虑的因…...

Python爬虫经典实战项目——电商数据爬取!
电商数据采集爬虫背景 在如今这个网购风云从不间歇的时代,购物狂欢持续不断,一年一度的“6.18年中大促”、“11.11购物节”等等成为了网购电商平台的盛宴。在买买买的同时,“如何省钱?”成为了大家最关心的问题。 比价、返利、优…...

Qt 快捷键设置
以 “在编辑时自动补齐”快捷键 为例: 位置:红色 搜索快捷键:蓝色 修改方式:绿色 快捷键:黄色...
【C++】取整函数ceil(),floor(),round()
使用 //引入头文件 #include <cmath> //函数使用 double around(double x) double afloor(double x) double aceil(double x) 结果取值 floor(x) 返回是小于或等于x的最大整数,如floor(-9.9)-10,floor(9.9)9;若为整数,最后的结果等于本…...
GoLang刷题之leetcode
题目42:接雨水 题目描述: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水 题解: 对于每一个横坐标能接到的雨水量max(左侧最大纵坐标,右侧最大…...
uniapp如何分包加载
在uni-app中,可以通过配置manifest.json文件来实现分包加载。以下是具体操作步骤: 在项目根目录下找到并打开manifest.json文件。在"uni-app"节点中,找到并修改"subPackages"节点,添加需要分包的页面路径。 …...

019、错误处理:不可恢复错误与panic!
鉴于上一篇文章过长,不方便大家阅读和理解,因此关于Rust中的错误处理, 我将分以下3篇来讲。 另外,随着我们学习的不断深入,难度也会越来越大,但不用担心。接下来只需要让自己的脚步慢一些,认真搞…...

jar包部署到linux虚拟机的docker中之后连不上mysql
前言: 跟着黑马学习docker的时候,将java项目部署到了docker中,运行访问报错,反馈连不上mysql。 错误描述: 方法解决: 概述:在虚拟中中,我进入项目容器的内部,尝试ping…...

如何筛选小红书护肤达人,笔记类型怎么选?
网络时代,借助KOL来放大产品的声量和产量,是品牌的常见策略,但是,不同的产品对应不同的KOL,价值是完全不一样。如何筛选达人,已经成为了品牌方的必修课!今天我们和大家分享下如何筛选小红书护肤达人&#x…...

红黑树(RBTree)
目录 一、红黑树简介 二、红黑树的来源 三、什么是红黑树 四、红黑树的性质 五、红黑树的节点定义 六、红黑树的操作 6.1、红黑树的查找 6.2、红黑树的插入 七、红黑树的验证 八、红黑树和AVL树的比较 一、红黑树简介 红黑树是一种自平衡的二叉查找树…...

训练YOLOS-S
文章目录 1 数据处理2 配置训练参数3 可能会遇到的报错 1 数据处理 修改类别数:在models/detector.py中定位到def build(args):,将num_classes进行修改,改为最大的类别id1。我有4个类别,类别id是从0~3,因此max_id3&am…...
集成SpringCloudAlibaba短信服务 短信验证码
1.1 SpringCloudAlibaba短信服务简介 短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力。 产品优势:覆盖全面、高并发处理、消息堆积处理、开发管理简单、智能监控调度 产品功能:短信通知、短信验证码、…...

存储卷(数据卷)—主要是nfs方式挂载
1、定义 容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的,一旦容器被删除,数据会丢失。k8s基于控制器创建的pod,delete相当于重启,容器的状态会恢复到原始状态。一旦回到原始状态,后天编辑的文件…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...