C#面向对象编程三大基本特征之-----封装

C# 面向对象的三大特性 目录 一、封装 二、继承 三、多态 C# 面向对象的三大特性分别是封装、继承、多态,下面将帮助您更深一步了解并运用这三大特性。 一、封装 封装被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。 抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可视化,封装则使开发者实现所需级别的抽象。 C# 封装根据... 阅读详情

     在面向对象的编程中,首先要清楚地理解面向对象编程的三个基本特征: 封装, 继承, 多态!

 

封装:更确切地说,是对象封装。就是每个对象都包含自己进行某种操作时所需要的所有信息,而不依赖于其他对象来完成该操作。

 

      下面,通过介绍C#的类,来充分理解对象封装的概念。


  所谓“对象”,形象地说,我们可以把它理解为一块积木。设计积木的人需要设计积木的外观与形状,还有内部的材质。堆积木的人对于内部的材质并不关心,他们只需要根据不同的外观与形状来决定堆放的位置。因此,对于开发者而言,要设计面向对象的程序,同时会是两个迥然不同的身份:设计者与使用者。

  先谈谈使用者。使用者的身份,就是利用已经提供给你的所有对象,根据需求,设计出自己需要实现的程序。就如堆积木的过程。这恰恰是面向对象编程的优势所在,那就是“对象的重用”。已经设计好的对象,可以被不同的使用者调用,这些功能既然已经实现,对于使用者而言,当然就免去了自己去设计的过程。正如堆积木那样,既然有了现成设计好的积木,使用者所要做的工作就是把这些积木最后组合起来,堆成不同的形状。.Net Framework所提供的类库,就是这样的积木。

  例如我们想把一个int类型转换成字符型,就没有必要自己去实现这种转换,直接调用.Net Framework提供的功能就可以了:

int i = 10;
string s = i.ToString();

  再比如我们想弹出一个Windows消息框,同样可以直接使用.Net Framework现有的类库:

MessageBox.Show(“Message”);

  在上述的例子中,i和MessageBox都是一个对象。

 

      再谈谈设计者的身份。虽然.Net Framework的类库功能已经非常强大,但它不可能考虑到业务的方方面面,如果需要使用一个根本就不存在的对象,此时就需要自己来设计了。例如图书管理系统,可能就需要用户,图书等对象。这就需要开发者自己来设计这些对象。

  既然最能体现“对象”思想的类型是“类”,就来看一下C#中的类类型。C#中类的关键字是class。在一个class对象中,主要分为field(字段)、property(属性)和method(方法),前面两个对应的是对象的属性,而method则对应对象的行为。

 

      字符串m_name,m_password,m_tryCounter就是类User的字段,Name,Password是类User的属性,而SignIn、SignOut和IsValid则是类User的方法。

  前面说到对象好比是一个积木,设计者需要定义好这个积木的外观和形状,也要考虑积木内部的制作,例如选用的材质,以及是空心还是实心。如果将这个积木剖开来看,实际上该对象应分为内、外两层。由于使用者只关心外部的实现,因此设计者就需要考虑,哪些实现应暴露在外,哪些实现应隐藏于内。这就体现了对象的封装的思想。

  封装对象,并非是将整个对象完全包裹起来,而是根据具体的需要,设置使用者访问的权限。在C#中,分别用修饰符public,internal,protected,private设定,分别修饰类的字段、属性和方法,甚至于类对象本身:

  public:表明所有对象都可以访问;
  protected internal:表明同一个程序集内的对象,或者该类对象以及其子类可以访问;
  internal:表明只有同一个程序集的对象可以访问;
  protected:表明只有该类对象及其子类对象可以访问;(关于继承,会在以后介绍)
  private:表明只有对象本身在对象内部可以访问;

  可以看出,public的开放性最大,其次是protected internal,private的开放性最小。internal和protected居中。那么,internal和protected哪一个开放范围更大呢?我认为,没有完全绝对的结论。它们的范围前者体现一个横向的概念,后者则体现纵向的概念。如果是internal,那么外部程序集对象自然不能访问,但只要是居于同一个程序集中,则所有对象都可以访问它;如果是protected,那么即使是外部程序集对象,只要它继承了该对象,就可以访问,而即使是同一程序集,如果对象不是该类对象的子类,也是无法访问的。打一个比方,在我们的传统文化中,是非常强调“宗族”观念的,一个宗族的族长,对于本族人而言,权力极大,甚至掌握了生杀大权。以一个州府的范围为例,internal就好比是知府大人,只要是该州府的百姓,都属于他的管辖范围,而不管他是哪一个宗族。protected则好比是宗族的族长,只要是这个宗族的成员,都要服从他,哪怕该成员属于其他州府。

  以前面定义的User类而言,所有的字段m_name,m_password,m_tryCounter都是private的,因此User类的外部调用者无法调用它们,但请注意User类内部的方法比如SignIn或者属性Name,却完全可以调用。同样的,private方法IsValid,可以被SignIn方法调用,但对于外部调用者而言,则是无法调用的。而对于public属性Name,Password,public方法SignIn和SignOut,外部的调用者是可以访问的。在后面的演练中,我们能够看出这之间的区别。通过这样分层次的封装,就可以充分保证对象的重用性和安全性。

  那么对于类类型而言,如何确定它们的访问权限呢?这要根据实际的需求来看了。假定这个User类是用于一个电子商务网站。那么电子商务系统在设计过程中,就需要调用到User类对象。显然,登录与退出功能是必须提供给外部使用者的,例如登录页面就会使用到User类。而IsValid()方法用于验证用户的合法性,虽然也非常必要,但该功能仅仅用于登录的时候核实用户身份,也就是说,IsValid方法只会被SignIn方法使用,但外部实用者却并不关心,因此,设置为private就是合理的。同样的道理,字段m_tryCounter也是如此。但如果需求发生改变,验证用户的功能不仅仅是登录的时候需要使用,在添加商品到购物车,下订单,付款的时候,都需要该功能,那么IsValid方法,就有必要修改为public方法了。

  所以,在设计程序的时候,除了要考虑识别对象,还要充分考虑该对象的封装。类对象内的字段、属性和方法,包括类本身,哪些应该暴露在外,哪些应该被隐藏,都需要根据实际的需求,给与正确的设计。

       演练:

  (一)设计类User,并调用该类

  1、打开Visual Studio.Net,选择“File”菜单的“new”,选择“Project”;

  2、选择Visual C# Projects中的“Console Application”。在Location中,定位你要保存的项目的路径,而名字则为“SecondExample”。该名字此时既是解决方案的名字,同时也是该项目的名字。

  3、用鼠标右键单击项目名,在弹出的对话框中,将Assembly Name命名为SecondExample,将Default Namespace命名为:encapsulation. SecondExample。

  4、用鼠标右键单击项目名,选择“Add”菜单项的“Add Class”


      5、在弹出的对话框中,将文件的名字命名为User.cs

 

      6、点击“Open”按钮后,项目中就添加了一个新的文件User.cs。打开该文件,将public class User中的内容,修改为前面文中定义好的User类。

  7、修改原有默认的Class1.cs(如果是Visual Studio 2005,则默认为Program.cs)文件名为App.cs,然后将文件内容修改为:

  

      8、运行

深入理解C#面向对象编程::概念、原则、特性及应用 阅读详情

相关推荐

C#语言的面向对象编程

C#语言的面向对象编程具有很强的表达能力和灵活性,通过类和对象、封装、继承和多态等特性,程序员能够构建出高效、可维护的应用程序。在现代软件开发中,掌握面向对象编程不仅是提高代码质量的关键,更是应对复杂性和变化需求的重要手段。希望本文能够帮助读者更好地理解和应用C#语言的面向对象编程理念,提升编程技能。

2501_90435685的博客 483

C# 面向对象编程的特征

C#和C++一样,作为面向对象的语言也有相同的三大特性:封装,继承,多态       所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程

张鹏的博客 1375

深入理解C#中的面向对象编程思想

抽象是将对象的复杂性隐藏起来,只暴露必要的功能和特性。抽象可以通过。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1711

【vscode简单入门(五)】vscode推荐设置:用户自定义代码段,自动保存,自动换行

(下一篇)—> 用户自定义代码段 用户自定义代码段: Files --> Preferences --> User snippets 名称-适用文档类型-快捷词-输出代码段($1,$2为Tab光标的位置)-描述词 目前定义有: 1.log 2.func 3.mine 自动保存 打开【settings】界面后,默认的【Auto Save】=【off】,意思是不自动保存,每次都需要用户自己手动保存 vscode如何设置自动保存 【afterDelay】 1)这个是固定间隔时间,自动保存 2)这

JZevin的博客 3596

【从零开始入门unity游戏开发之——C#篇16】C#什么是面向对象编程?

面向对象编程(OOP)是一种通过模拟现实世界事物和它们的行为来设计和组织代码的方法。通过将相关的数据和方法(即函数)组织成类,然后实例化为对象,来更加自然地描述和实现问题。简单来说,面向对象就是把现实中的事物抽象成类和对象来编程。面向对象编程是一种核心的编程思想,几乎所有现代的编程语言(如Java、Python、C#等)都支持面向对象设计。掌握了面向对象的核心概念和原则,你可以编写出更结构清晰、扩展性强、易于维护的程序。从日常的应用开发到复杂的游戏、软件、网站开发,面向对象编程都在发挥着巨大的作用。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2750

NAO V6 开发环境的配置(附所有文件)

NAO V6开发环境配置前言环境Robot SettingsChoregraphe 2.8.5.10python2.7+naoqi2.8+opencv4.1.0putty与FileZilla 前言 学校的机器人摸索了一段时间,之前摸爬滚打探索环境,之前没接触这类机器人可能会非常艰辛,希望能给需要的人一些帮助。Nao与pepper通用 环境 win10(x64)+naoqi2.8 1、Robot S...

wbhhello的博客 3219

STM32F031C6与PJ85718DM单总线温度传感器:HVAC抗干扰采集方案

单总线数字温度传感器因其接口简洁、布线成本低,在嵌入式温度采集和暖通控制中被广泛采用。其核心原理是通过一根数据线完成命令收发与温度读取,依靠64位唯一序列号实现多节点挂载。配合STM32F031C6这类Cortex-M0主控,可在低成本前提下实现稳定时序控制与软件滤波,有效应对长线传输和现场电磁干扰。该方案覆盖机柜温度监测、风管及水管测温、远程数据汇总等典型场景,尤其适合HVAC温控面板与数据采集节点。文章以STM32F031C6搭配PJ85718DM为例,解析上拉电阻选型、远程布线要点、固件时序和CRC校

weixin_33850890的博客 346

国产大模型 coding plan 实战决策指南:GLM、Kimi、豆包、abab 四大模型分层选型与工程落地

大模型辅助编程(coding assistant)正从概念验证走向规模化工程落地,其核心已不再是‘能否生成代码’,而是‘如何在真实开发流程中精准赋能’。理解模型能力边界、匹配技术栈特征、构建分层工作流(L1行级补全/L2函数生成/L3模块重构),是实现稳定提效的关键。GLM系列以工程稳定性见长,适合代码审计与测试生成;Kimi-Max凭借200K超长上下文胜任深度重构与合规审查;豆包响应快、框架适配深,是IDE高频补全的理想选择;abab系列则在IoT固件等跨模态场景中展现独特价值。本文聚焦国产模型在金融、

weixin_32238157的博客 427

C语言字符串Trim()函数的实现

#include #include //trim:remove trailing blacks, tabs, newlines int trim(char s[]); int Trim(char s[]); int main() { char a[] =

4129

IsaacGym四足机器人sim to real全过程详细解析(walk these ways方法)

本文使用强化学习的方法运行到Aliengo机器人上完成从训练到部署的全过程。该方法使用的是GO1机器人提供了完整的sim to real代码和遥控器控制代码,所以我们只需要重新训练和部署健康就可以使用在Aliengo上。该方法使用lcm进行通讯首先程序通过UDP和机器人控制板进行通讯获取机器人状态并下达指令。然后又通过lcm进行机器人状态信息的发布和模型命令的获取。

weixin_44061195的博客 2万+

MATLAB实战:5步搞定GNSS单点定位解算(附完整代码)

本文提供了一份基于MATLAB的GNSS单点定位实战指南。通过5个核心步骤,详细讲解了如何从卫星坐标和伪距观测值出发,利用最小二乘迭代算法,构建并实现一个完整的单点定位解算器。文章附有完整代码,并涵盖精度评估与结果分析,适合GNSS初学者和MATLAB用户快速上手实践。

a2b3c4d5e的博客 250

C#基础编程-----面向对象特性之封装

C#封装 封装被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。 抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可视化,封装则使开发者实现所需级别的抽象。 C# 封装根据具体的需要,设置使用者的访问权限,并通过访问修饰符来实现。 一个访问修饰符定义了一个类成员的范围和可见性。C# 支持的访问修饰符如...

csdn_cSharp的博客 339

【CQUT】从零开始龙芯杯-开始前的准备

不同级别的Cpu对于vivado综合的时间有较大影响,其中Cpu的单核、多核性能以及cache性能影响权重较高。因此,为了保证学习进度和效率,我们建议在Cpu不低于I5 12400的环境下进行学习。Vivado2023.2安装包约100GB,为了保证成功安装建议留出300GB硬盘空间。龙芯杯的许多资料被托管在gitee,你需要git指令将资料克隆到本地。指定用书:CPU设计实战 Loongarch版 作者:汪文祥、邢金璋。Cpu性能对比网站:https://www.cpu114.com/

weixin_73689971的博客 906

java-面向对象编程-三大特性之封装

我们在上一章中谈到了面向对象编程的三大特性之一的继承。并且说到在继承中,父类其实是从子类中抽象出来的,而在这里所说的抽象,就可以理解为数据封装的一种表达方式。而准确来说,所谓的封装,就是在人为对客观事物进行抽象之后,将其聚合在一个类内,并且这个类可以把自己的属性和方法只让可信的类(继承)或者对象(new)操作,对不可信的进行信息隐藏。注意的是。这里说的属性并不仅仅是基本数据类型,还包括引用数据类型,

明立的博客 3520

hwasan实例分析踩内存之一:camx进程stack tag-mismatch的三种解决方案

hwasan实例分析踩内存之一:camx进程stack tag-mismatch的三种解决方案。

1291

【MicroPython编程-ESP32篇:设备驱动】-SHT31温度湿度传感器驱动

SHT31 是 Sensirion 的下一代温湿度传感器。 它建立在一个新的 CMOSens® 传感器芯片之上,该芯片是 Sensirion 新湿度和温度平台的核心。

视觉与物联智能 228

一文了解C#面向对象编程:封装

一文了解C#面向对象编程:封装

qq_35320456的博客 1627

《Python全栈系列教程》专栏介绍及文章汇总

《Python全栈系列教程》专栏介绍及文章汇总

孤寒者的博客 71万+

【C#】面向对象的三大特性,还记得吗,简单代码举例回顾

C# 面向对象的三大特性是封装、继承和多态。

小5聊的博客 1830

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【C#】C#面向对象(封装,继承,多态,抽象)

多态是指同一操作在不同对象上具有不同的表现形式.通过多态,可以使用统一的接口来调用不同对象的特定实现抽象是对现实世界复杂对象的建模,提取出关键特性,忽略不必要的细节.抽象可以通过抽象类和接口来实现,提供一个模板,让子类实现特定的功能封装:通过访问修饰符和属性,保护对象的内部状态,提供受控的访问接口继承;子类继承父类的属性和方法,实现代码重用和逻辑扩展多态:通过方法重写和接口实现,实现相同接口的不同表现形式,增强代码的灵活性和可扩展性抽象:通过抽象类和接口,定义对象的抽象模型,强制子类实现特定的行为。

冰茶的博客 1546

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C#基础:类的三大特性 之 封装

一、封装、继承、多态关系说明 二、什么是封装 三、封装的好处 四、封装体现和使用

青岚岁叶的博客 1094

C#基础篇(05)面向对象编程的三大特性(封装、继承、多态)

摘要:本文介绍了面向对象编程的三大特性。封装通过私有字段和公共属性/方法实现数据隐藏和保护;继承允许子类复用父类代码,支持单继承和构造函数调用规则;多态包括方法重载(参数不同)和方法重写(virtual/override或new关键字实现),使不同对象对同一消息做出不同响应。这些特性共同构成了面向对象编程的核心机制,提高了代码的可重用性、可维护性和灵活性。(149字)

m0_55575697的博客 653

C# 封装

C#封装的核心概念与实现 摘要:封装是C#面向对象编程的核心原则,通过隐藏实现细节并暴露公共接口来保护数据安全性和提升代码可维护性。C#主要利用类、访问修饰符(private/public)和属性机制实现封装:私有字段存储数据,公共方法/属性提供受控访问。研究表明,封装能有效降低代码耦合度,但需注意避免过度封装导致的复杂性。典型应用场景包括银行账户管理、用户数据保护等,通过属性验证确保数据完整性。(150字)

likuoelie的博客 1004

C#面向对象编程之封装

一、面向对象的三大特性 封装:隐藏内部实现,稳定外部接口 继承:子类继承父类成员,实现代码复用 多态:不同子类对同一个消息做出不同的反应 二、类与对象 对象是存在的具体实体,具有明确定义的状态和行为。是面向对象编程的核心,为计算机应用程序提供实用基础。是人们要进行研究的任何事物。 类以共同特性和操作定义实体。是用于组合各个对象所共有操作和属性的一种机制。是具有相同状态和行为的一组对象的集合。。 类与对象的关系:类是建筑蓝图、对象是按照这份蓝图来建造的房子。类是对象的原型,所有属于同一个类的对象

weixin_49251429的博客 827

【C# 基础精讲】继承、封装、多态

继承、封装和多态是面向对象编程的核心概念,它们有助于创建更加模块化、可扩展和可维护的代码。继承允许子类继承父类的属性和方法,实现代码的复用和功能的扩展。封装将类的内部实现细节隐藏,通过接口提供对外的访问方式,提高代码的安全性和可维护性。多态允许不同类的对象对相同的消息做出响应,表现出不同的行为,提供了更加灵活的调用方式。这三个概念在C#中得到了广泛的应用,通过深入理解它们的含义和应用,您将能够编写出更加优雅、健壮的面向对象程序。

繁依Fanyi的博客 1708
上一篇: 网络基础----OSI参考模型
下一篇: 图解Ubuntu安装时手动分区方法
Zevin
博客等级 码龄17年 63粉丝 77原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值