C#封装、继承和多态的用法详解
大家好,今天我们将来详细探讨一下C#中封装、继承和多态的用法。作为C#的三大面向对象的特性,这些概念对于程序员来说非常重要,因此我们将对每个特性进行详细的说明,并提供相应的示例代码。

目录
- 1. 封装(Encapsulation)
- 2. 继承(Inheritance)
- 3. 多态(Polymorphism)
- 总结
1. 封装(Encapsulation)
封装是指将数据和方法包裹在类中,同时通过访问修饰符来控制对这些数据和方法的访问。通过封装,我们可以隐藏类内部的实现细节,仅提供对外界必要的接口。这样可以提高代码的可维护性和安全性。
下面是一个示例代码:
public class Person
{private string name;private int age;public void SetName(string newName){name = newName;}public string GetName(){return name;}public void SetAge(int newAge){age = newAge;}public int GetAge(){return age;}
}
在这个示例中,我们将name和age变量声明为私有(private),并通过SetName、GetName、SetAge和GetAge方法对外提供了访问这些私有变量的接口。这样,在其他类中,我们只能通过这些方法来修改和获取name和age的值,有效地保护了数据的安全性。
2. 继承(Inheritance)
继承是指通过一个已有的类创建新类,新类能够继承原始类的属性和方法,并可以在此基础上进行扩展和修改。通过继承,我们能够达到代码重用和扩展的效果。
下面是一个示例代码:
public class Animal
{protected string species;public void Move(){Console.WriteLine("This animal can move.");}
}public class Dog : Animal
{public Dog(){species = "Dog";}public void Bark(){Console.WriteLine("The dog is barking.");}
}
在这个示例中,我们定义了Animal类,其中包含species变量和Move方法。然后通过Dog类继承了Animal类,并添加了Bark方法。通过继承,Dog类可以使用和修改Animal类中定义的属性和方法,同时还能扩展自己的特定功能。
3. 多态(Polymorphism)
多态是指一个对象在不同情境下具有不同的形态和表现。在C#中,多态通过继承和接口实现。通过多态,我们可以编写通用的代码,适应不同的对象和需求。
下面是一个示例代码:
public class Shape
{public virtual void Draw(){Console.WriteLine("This is a shape.");}
}public class Circle : Shape
{public override void Draw(){Console.WriteLine("This is a circle.");}
}public class Square : Shape
{public override void Draw(){Console.WriteLine("This is a square.");}
}
在这个示例中,我们定义了一个Shape类,并在其中的Draw方法标记为virtual。然后通过Circle类和Square类分别继承Shape类,并分别重写了Draw方法。通过多态,我们可以在不同的上下文中使用这些类,并根据实际情况调用相应的方法。
总结
封装、继承和多态是C#中三个重要的面向对象的特性。封装可以保护数据的安全性,继承可以实现代码的重用和扩展,多态可以实现代码的通用性和灵活性。在实际开发中,合理运用这些特性可以提高代码的可维护性和可扩展性。
相关文章:
C#封装、继承和多态的用法详解
大家好,今天我们将来详细探讨一下C#中封装、继承和多态的用法。作为C#的三大面向对象的特性,这些概念对于程序员来说非常重要,因此我们将对每个特性进行详细的说明,并提供相应的示例代码。 目录 1. 封装(Encapsulati…...
数据结构与算法(持续更新)
线性表 单链表 单链表的定义 由于顺序表的插入删除操作需要移动大量的元素,影响了运行效率,因此引入了线性表的链式存储——单链表。单链表通过一组任意的存储单元来存储线性表中的数据元素,不需要使用地址连续的存储单元,因此它…...
HDLbits: ece241 2014 q4
module top_module (input clk,input x,output z ); reg [2:0] Q;always(posedge clk)beginQ[0] < Q[0] ^ x;Q[1] < (~Q[1]) & x;Q[2] < (~Q[2]) | x;z < ~(| Q[2:0]); //错误!!!!endendmodule 正确答案…...
LuatOS-SOC接口文档(air780E)-- gmssl - 国密算法
sm.sm2encrypt(pkx,pky,data)# sm2算法加密 参数 传入值类型 解释 string 公钥x,必选 string 公钥y,必选 string 待计算的数据,必选,最长255字节 返回值 返回值类型 解释 string 加密后的字符串, 原样输出,未经HEX转换 例子 local originStr "encryptio…...
【线性代数及其应用 —— 第一章 线性代数中的线性方程组】-1.线性方程组
所有笔记请看: 博客学习目录_Howe_xixi的博客-CSDN博客https://blog.csdn.net/weixin_44362628/article/details/126020573?spm1001.2014.3001.5502思维导图如下: 内容笔记如下:...
vue实现拖拽排序
在业务中列表拖拽排序是比较常见的需求,常见的JS拖拽库有Sortable.js,Vue.Draggable等,大多数同学遇到这种需求也是更多的求助于这些JS库,其实,使用HTML原生的拖放事件来实现拖拽排序并不复杂,结合Vue的tra…...
IS-IS
二、IS-IS中的DIS与OSPF中的DR Level-1和Level-2的DIS是分别选举的,用户可以为不同级别的DIS选举设置不同的优先级。DIS的选举规则如下:DIS优先级数值最大的被选为DIS。如果优先级数值最大的路由器有多台,则其中MAC地址最大的路由器会成为DI…...
【MySQL】为什么使用B+树做索引
MySQL的innoDB引擎使用的是B树的结构来存储索引的,那么为什么会使用B树呢?为什么不使用其他的结构?本篇我们深入MySQL底层来了解B树。本文中说到的MySQL都是InnoDB引擎的 在这之前,先了解一下InnoDB是如何存储数据的 MySQL是根据数据页的方式…...
php 安装mongodb扩展模块,rdkafka模块
mongodb mongodb扩展下载 选择php版本,根据报错提示,选择扩展对应的版本选择非安全进程将php_mongodb.dll放到php/ext目录下修改php.ini配置,添加extensionphp_mongodb.dll开启php_mongodb扩展,重启服务php -m 查看是否开启成功…...
【数据结构】初探时间与空间复杂度:算法评估与优化的基础
🚩纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:数据结构 🔥该文章主要了解算法的时间复杂度与空间复杂度等相关知识。 目录: 🌏 时间复杂度🔭…...
SpringCloud Alibaba - Sentinel 限流规则(案例 + JMeter 测试分析)
目录 一、Sentinel 限流规则 1.1、簇点链路 1.2、流控模式 1.2.1、直接流控模式 1.2.2、关联流控模式 a)在 OrderController 中新建两个端点. b)在 Sentinel 控制台中对订单查询端点进行流控 c)使用 JMeter 进行测试 d)分…...
uniapp 条件编译 APP 、 H5 、 小程序
一、#ifdef、#ifndef、 #endif三者的区别、 标识作用#ifdef仅在某个平台上使用#ifndef在除了这个平台的其他平台上使用(非此平台使用)#endif结束条件编译 二、平台标识 标识平台APP-PLUS5AppMP微信小程序/支付宝小程序/百度小程序/头条小程序/QQ小程序MP-WEIXIN微…...
深度学习——权重衰减(weight_decay)
深度学习——权重衰减(weight_decay) 文章目录 前言一、权重衰减1.1. 范数与权重衰减1.2. 高维线性回归1.3. 从零开始实现1.3.1.初始化模型参数1.3.2. 定义L₂范数惩罚1.3.3. 定义训练代码实现1.3.4. 不管正则化直接训练1.3.5. 使用权重衰减 1.4. 简洁实现 总结 前言…...
nignx如何部署让前端不用清缓存就可以部署
在Nginx中,可以使用以下方法来部署前端应用程序,使前端用户无需清空缓存即可进行部署: 1、使用版本号:在前端应用程序的构建过程中,可以添加一个独特的版本号到应用程序的名称中。每次部署时,将版本号更新…...
CSS3实现动画加载效果
<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>加载效果</title><link rel"style…...
springboot定时任务Scheduled使用和弊端分析
1.springboot定时任务Scheduled使用说明: (1)创建定时任务类 import com.one.utils.DateUtil; import org.springframework.beans.factory.annotation.Autowired; import...
openGauss学习笔记-93 openGauss 数据库管理-访问外部数据库-oracle_fdw
文章目录 openGauss学习笔记-93 openGauss 数据库管理-访问外部数据库-oracle_fdw93.1 编译oracle_fdw93.2 使用oracle_fdw93.3 常见问题93.4 注意事项 openGauss学习笔记-93 openGauss 数据库管理-访问外部数据库-oracle_fdw openGauss的fdw实现的功能是各个openGauss数据库及…...
【Git】Git下载安装环境配置 下载速度慢的解决方案
这里写自定义目录标题 介绍一、下载官网下载镜像站 二、安装安装成功 三、Git三种界面介绍Git cmd界面展示git bash界面展示git GUI界面展示 四、环境配置配置流程1、打开环境变量界面2、添加环境变量 /删除环境变量3、在变量中找到Git\cmd的值就表示配置成功4、没有找到点击新…...
常见源协议介绍
开源协议(Open Source License)是一种法律文档,用于规定如何使用、修改和分发开源软件和其他开源项目的规则和条件。这些协议允许创作者或组织将其创造的代码或作品以开放源代码的形式共享给他人,以促进协作、创新和知识共享。常见…...
大数据概述(林子雨慕课课程)
文章目录 1. 大数据概述1.1 大数据概念和影响1.2 大数据的应用1.3 大数据的关键技术1.4 大数据与云计算和物联网的关系云计算物联网 1. 大数据概述 大数据的四大特点:大量化、快速化、多样化、价值密度低 1.1 大数据概念和影响 大数据摩尔定律 大数据由结构化和非…...
硬件开发、智能硬件与硬件系统:从概念到产品的完整技术解析
1. 项目概述:从“黑盒子”到“白盒子”的认知跃迁在科技行业摸爬滚打十几年,我见过太多对“硬件”这个词的误解。有人觉得硬件就是电脑、手机这些看得见摸得着的“铁疙瘩”;有人觉得智能硬件就是给传统设备加个Wi-Fi模块;还有人觉…...
用逻辑分析仪实测STC15W408AS驱动BLDC电机:PWM波形与换相时序全解析
用逻辑分析仪实测STC15W408AS驱动BLDC电机:PWM波形与换相时序全解析 当硬件电路搭建完成,代码烧录进单片机后,真正的挑战才刚刚开始——如何验证那些看不见的电信号是否按预期工作?本文将以STC15W408AS驱动无感BLDC电机为例&#…...
为什么你需要一个完整的Unity历史版本下载库?开发者必备的版本管理解决方案
为什么你需要一个完整的Unity历史版本下载库?开发者必备的版本管理解决方案 【免费下载链接】download.unity.com Unity国际版下载,解决国内打不开网站和被重定向的问题 项目地址: https://gitcode.com/gh_mirrors/do/download.unity.com 在游戏开…...
Delphi二进制迷宫破解:IDR交互式重构器的逆向工程革命
Delphi二进制迷宫破解:IDR交互式重构器的逆向工程革命 【免费下载链接】IDR Interactive Delphi Reconstructor 项目地址: https://gitcode.com/gh_mirrors/id/IDR 在逆向工程的世界里,Delphi编译的程序犹如一座座精心设计的迷宫——结构复杂、入…...
Android 开发问题:It‘s possible to extract method returning XXX from a long surrounding...
在 Android 开发中,Android Studio 出现如下提示信息 Its possible to extract method returning TakeCardRecordListDTO from a long surrounding method# 解读可以从长方法中提取返回“TakeCardRecordListDTO”的方法问题原因这段提示是提取方法重构策略ÿ…...
ARM裸机开发:从异常处理到协作式调度器的实战指南
1. 项目概述:从“异常”切入,理解ARM裸机开发的本质如果你刚开始接触ARM嵌入式开发,可能会觉得“异常”这个词有点吓人,听起来像是程序出了什么大问题。但恰恰相反,在ARM裸机开发的世界里,“异常”是系统与…...
HsMod终极指南:55项功能打造你的个性化炉石传说体验
HsMod终极指南:55项功能打造你的个性化炉石传说体验 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx框架开发的炉石传说多功能插件,为玩家提…...
Zynq矿板DDR3内存配置与测试全攻略:从硬件探秘到软件调试
1. 项目概述与核心价值最近在折腾一块基于Xilinx Zynq-7000系列的“矿板”,说白了就是一些特定应用场景(比如早期的加密货币计算)淘汰下来的硬件。这些板子往往用料扎实,核心的FPGAARM架构完整,但价格却只有正规开发板…...
这个AI助手不让你教它,它自己来了解你
这个AI助手不让你教它,它自己来了解你OpenHuman:9700 Star,GitHub霸榜的秘密最近GitHub Trending上冒出来一个项目,连续霸榜多天,Star数蹭蹭往上涨。我点进去看了一眼,思路跟之前那些Agent工具完全不一样。…...
实习前自我培训-Day3学习
Day3学习–MySQL 企业开发使用方式 使用命令mysql -hip地址 -P端口号 -uroot -p来连接远程的数据库 数据模型关系型数据库:建立在关系模型基础上,由多张相互连接的二维表组成的数据库特点:使用表存储数据,格式同意,便于…...
