C#面向对象——封装、封装案例示例

C#面向对象——封装

什么是封装?
(1)封装是将数据和操作数据的方法(行为)封装在一起。
(2)程序中封装的体现:属性,方法,类,接口,命名空间,程序集等

封装的优势:

  1. 信息隐藏: 封装隐藏了对象的内部实现细节,只暴露了必要的接口给外部使用。这样可以防止外部直接访问对象的状态,保护了数据的完整性和安全性。
  2. 简化接口: 封装将对象的状态和行为封装在一起,使得对象的使用者不需要了解对象的内部实现细节,只需通过公共接口来访问对象的功能。
  3. 提高可维护性: 封装将对象的内部实现细节隐藏起来,使得对象的内部可以独立地进行修改和维护,而不会影响到外部使用者。
  4. 降低耦合性: 封装将对象的实现细节与外部接口分离开来,减少了对象之间的依赖关系,降低了耦合性,使得代码更易于理解、修改和扩展。

按照字面意思,封装就是把什么东西装在一起一个容器中,封闭起来;假设我们要设计一个简单的银行账户类,其中包含账户的基本信息(账户名、账号、余额)以及一些操作(存款、取款、查询余额)。

可以使用封装来隐藏账户的内部实现细节,并通过公共方法来访问和修改账户的信息。

示例代码:

using System;public class BankAccount
{private string accountName;private string accountNumber;private decimal balance;// 构造函数public BankAccount(string name, string number){accountName = name;accountNumber = number;balance = 0; // 初始化余额为0}// 存款public void Deposit(decimal amount){if (amount > 0){balance += amount;Console.WriteLine($"成功存入 {amount} 元。");}else{Console.WriteLine("存款金额必须大于0。");}}// 取款public void Withdraw(decimal amount){if (amount > 0 && balance >= amount){balance -= amount;Console.WriteLine($"成功取出 {amount} 元。");}else{Console.WriteLine("取款金额必须大于0且不超过账户余额。");}}// 查询余额public decimal CheckBalance(){return balance;}
}class Program
{static void Main(string[] args){// 创建银行账户对象BankAccount account = new BankAccount("张三", "123456");// 存款account.Deposit(1000);// 取款account.Withdraw(500);// 查询余额decimal balance = account.CheckBalance();Console.WriteLine($"当前余额为:{balance}");}
}

在这个例子中,BankAccount 类封装了账户的属性(accountName、accountNumber、balance)和方法(Deposit、Withdraw、CheckBalance)。这些属性都是私有的,只能通过公共方法来访问和修改。这样,我们就隐藏了账户的内部实现细节,只暴露了必要的接口给外部使用,提高了代码的安全性和可维护性。

注意事项:

  1. 封装的访问控制: 使用适当的访问修饰符(如 public、private、protected)来控制对象的访问权限,尽量将对象的状态设为私有,只通过公共方法来访问和修改对象的状态。
  2. 不要过度封装: 封装的目的是隐藏对象的内部实现细节,提供合适的接口给外部使用。但是过度封装会导致接口过于复杂,增加了代码的维护成本。应该根据实际需求合理地进行封装。
  3. 封装与性能: 封装有时候可能会带来一定的性能损失,因为需要通过方法调用来访问对象的状态。在性能敏感的场景下,可以考虑适度地放宽封装,直接访问对象的属性。
  4. 保持一致性: 对象的状态应该通过一致的接口来访问和修改,避免直接操作对象的内部状态。这样可以确保对象的状态处于有效的状态,并且能够方便地对状态进行验证和修改。
  5. 封装与继承: 封装和继承是面向对象编程的两个重要特性。在设计类的时候,需要考虑如何合理地使用封装和继承来实现代码的复用和扩展。

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

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

相关文章

【管理咨询宝藏78】MBB大型城投集团核心能力建设分析报告

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏78】MBB大型城投集团核心能力建设分析报告 【格式】PDF版本 【关键词】战略规划、商业分析、管理咨询、MBB顶级咨询公司 【强烈推荐】 这是一套…

什么是CPU与GPU,它们之间有什么关系

什么是CPU与GPU,它们之间有什么关系一、CPU1. 核心功能2. 工作原理3. 组成部分4. 发展历程5. 性能指标6. 架构种类7. 发展趋势8. 应用领域 二、GPU三、CPU与GPU的关系 什么是CPU与GPU,它们之间有什么关系 一、CPU CPU,全称是“Central Proc…

RabbitMQ + Spring Boot + Python的使用过程

需求:后端执行Pytorch框架下的模型,对输入图像的评估,得到一个分数。 首先,实现Java和Python的交互,参考以下资料: spring boot 项目实现调用python工程的方法_springboot中可以用python吗-CSDN博客 有五…

吃鸡游戏msvcp140.dll丢失的解决方法

msvcp140.dll 是一个与 Microsoft Visual C Redistributable 相关的动态链接库(DLL)文件,是 Windows 操作系统中众多应用程序正常运行所必需的关键组件之一。以下是对 msvcp140.dll 文件的总体介绍和msvcp140.dll丢失的多个解决方案分享。 *…

C++高级特性:nullptr和NULL的区别(十)

1、NULL和0 在C语言标准定义中,NULL的定义为(void *)0 这样的代码意味着可以进行强制类型转换一个void *类型的指针到任意类型的指针 #define NULL (void*)0 char *p NULL;C11之后NULL被定义为0,此时可以认为NULL不完全是一个空指针。 #ifndef __cplusp…

ROS仿真小车(一)—— urdf模型+rviz可视化

文章目录 前言一、创建功能包二、urdf文件三、launch文件四、图形化显示五、RVIZ可视化总结参考文献 前言 ROS学习过程记录,从零开始仿真一辆小车,之后会实现运动控制、雷达、相机等 部分代码已上传至本人的GitHub,如果需要请自行下载&…

算法题解记录18+++搜索二维矩阵Ⅱ

本题可以说是运用二分查找的典例,即使是面对矩阵,只要是它保持“排序好”这样的结构,就一定能采用二分查找法。【你知道的,对于排序好的数组,二分查找几乎是最优秀的算法】 当然,答案提供的是“Z字形查找法…

实在Agent:超自动化智能体的革命(附导引指南)

在自动化技术的浪潮中,实在智能推出了实在Agent(智能体),一款基于大语言模型和屏幕语义理解技术的超自动化智能体。它通过自然对话交互,将复杂工作简化为一句话指令,自动规划并执行工作任务,极大…

C++奇迹之旅:深入理解赋值运算符重载

文章目录 📝赋值运算符重载🌠 运算符重载🌉特性 🌠 赋值运算符重载🌠传值返回:🌠传引用赋值:🌉两种返回选择🌉赋值运算符只能重载成类的成员函数不能重载成全…

【御控物联】物联网数据传输数据格式

随着物联网技术的快速发展,越来越多的系统和设备被接入到了物联网管理中,数据交换与共享成为了一个重要的问题。不同的设备和系统之间存在着各种各样的通信协议和数据格式,这就给数据获取、交换和共享带来了很大的不便利。 MQTT 是机器对机器…

unity学习(86)——细节优化

东西已经做出来了,现在需要的是优化,说得简单,做起来难。 1.122包的优化,避免重复创建! 2.为何会出现一边动,一边不动的情况。重复登录后依旧是unity可以看到移动,但是exe那边看不到移动&#…

关于图像YUV格式分类和排布方式的全学习

【学习笔记】关于图像YUV格式分类和排布方式的全学习_yuv图像-CSDN博客 下图是将多个yuv420p图像(A和B),拼接成一个画面的思路 A大小:416*64 B大小:416*208 将A和B合并到一个416*416的尺寸上,代码如下 //整合char * ptd;ptd (char * ) malloc (416*41…

C#通用类库封装实战

数据库查询 特性方式获取数据库列的别名 数据库更新 使用简单工厂配置的方式

套接字基础

套接字基础 套接字一、socket二、setsockopt三、bind四、listen五、select六、poll七、epoll一、水平模式(Level-Triggered,LT)二、边沿模式(Edge-Triggered,ET) 套接字 最近学习网络编程的时候&#xff0c…

甲辰年半日闲有得

甲辰年半日闲有得 出入一世红尘客,得失九台江湖人。 纠结苦海他日心,​何须挂碍当下身。 ​曾是春风得意时,重游故地情念真。 ​忘我才知小境遇,利他方明大原本。

矽塔SA8321 单通道 2.7-12.0V 持续电流 3.0A H 桥驱动芯片

描述 SA8321是为消费类产品,玩具和其他低压或者电池供电的运动控制类应用提供了一个集成的电机驱动器解决方案。此器件能够驱动一个直流无刷电机,由一个内部电荷泵生成所需的栅极驱动电压电路和4个功率 NMOS组成H桥驱动,集成了电机正转/反…

2024上海国际半导体制造设备材料与核心部件展览会

2024上海国际半导体制造设备材料与核心部件展览会 2024 Shanghai International Semiconductor Manufacturing Equipment Materials and Core Components Exhibition 时间:2024年11月18日-20日 地点:上海新国际博览中心 详询主办方陆先生 I38&#…

2024蓝桥杯嵌入式模板代码详解

文章目录 一、STM32CubeMx配置二、LED模板代码三、LCD模板代码 一、STM32CubeMx配置 打开STM32CubeMx,选择【File】->【New Project】,进入芯片选择界面,搜索到蓝桥杯官方的芯片型号,并点击收藏,下次直接点击收藏就…

【LeetCode: 39. 组合总和 + 递归】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

比特币减半倒计时:NFT 生态将受到怎样的影响?

BTC 减半倒计时仅剩不到 1 天,预计在 4 月 20 日迎来减半。当前区块奖励为 6.25 BTC,减半后区块奖励为 3.125 BTC,剩余区块为 253。比特币减半无疑是比特币发展史上最重要的事件之一,每当这一事件临近,整个加密社区都充…