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;}
}

在这个示例中,我们将nameage变量声明为私有(private),并通过SetNameGetNameSetAgeGetAge方法对外提供了访问这些私有变量的接口。这样,在其他类中,我们只能通过这些方法来修改和获取nameage的值,有效地保护了数据的安全性。

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#中三个重要的面向对象的特性。封装可以保护数据的安全性,继承可以实现代码的重用和扩展,多态可以实现代码的通用性和灵活性。在实际开发中,合理运用这些特性可以提高代码的可维护性和可扩展性。

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

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

相关文章

ElementUI结合Vue完成主页的CUD(增删改)表单验证

目录 一、CUD ( 1 ) CU讲述 ( 2 ) 编写 1. CU 2. 删除 二、验证 前端整合代码 : 一、CUD 以下的代码基于我博客中的代码进行续写 : 使用ElementUI结合Vue导航菜单和后台数据分页查询 ( 1 ) CU讲述 在CRUD操作中,CU代表创建(Create&#xff09…

我做了一个简易P图(参数图)分析软件

P图(即参数图,Parameter Diagram),是一个结构化的工具,帮助大家对产品更好地进行分析。 典型P图格式 P图最好是和FMEA软件联动起来,如国可工软的FMEA软件有P图分析这个功能。 单纯的P图分析软件很少,为了方便做P图分…

Elasticsearch:多语言语义搜索

在此示例中,我们将使用多语言嵌入模型 multilingual-e5-base 对混合语言文档的 toy 数据集执行搜索。 使用这个模型,我们可以通过两种方式进行搜索: 跨语言,例如使用德语查询来查找英语文档在非英语语言中,例如使用德…

【C++】多线程的学习笔记(2)——白话文版(bushi

目录 前一篇 本章内容提要 使用mutex锁的原因 mutex锁的概念 mutex的使用教程 锁的声明以及命名 mutex的加锁以及解锁 例子 结果 注意 mutex的其他方式的锁介绍 lock_guard 介绍 例子 运行结果 adopt_lock参数 unique_lock 介绍 try_to_lock defer_lock re…

iOS开发 通过分析UMeng的错误详情解决crash问题

iOS开发 通过分析UMeng的错误详情解决crash问题 在项目中获取崩溃信息很重要。在iOS开发调试以及上线之后,程序经常会出现Crash问题。比较常见的第三方crash分析工具是使用友盟、百度、crashlytics等。第三方crash分析工具,甚至还带了符号化crash日志的…

设计模式 - 七大软件设计原则

目录 一、设计模式 1.1、软件设计原则 1.1.1、开闭原则 1.2.2、单一职责原则 1.2.3、里氏替换原则 1.2.4、迪米特原则 1.2.5、接口隔离原则 1.2.6、依赖倒转原则 1.2.7、合成/聚合复用原则 一、设计模式 1.1、软件设计原则 1.1.1、开闭原则 开闭原则:对扩…

Docker 日志管理 - ELK

Author:rab 目录 前言一、Docker 日志驱动二、ELK 套件部署三、Docker 容器日志采集3.1 部署 Filebeat3.2 配置 Filebeat3.3 验证采集数据3.4 Kibana 数据展示3.4.1 创建索引模式3.4.2 Kibana 查看日志 总结 前言 如何查看/管理 Docker 运行容器的日志?…

1.Linux入门基本指令

个人主页:Lei宝啊 愿所有美好如期而遇 目录 01.ls指令 02.pwd指令 03.cd指令 04.touch指令 05.mkdir指令(重要) 06.rmdir&&rm指令(重要) 07.man指令(重要) 08.cp指令(重要) 09.mv指令(重要) 10.cat指令 nano指令 echo指令 输出重定向 追加重…

当 FineReport 遇见 CnosDB

随着大数据和物联网应用的快速发展,时序数据库成为了一种关键的数据存储和分析工具。而 FineReport 作为一款流行的商业智能工具,与时序数据库 CnosDB 的集成可以为企业提供更强大的数据分析和可视化功能。本博客将介绍如何将 FineReport 与 CnosDB 集成…

架构师-软件工程习题选择题

架构师-软件工程习题选择题

SpringBoot-黑马程序员-学习笔记(一)

8.pom文件中的parent 我们使用普通maven项目导入依赖时,通常需要在导入依赖的时候指定版本号,而springboot项目不需要指定版本号,会根据当前springboot的版本来下载对应的最稳定的依赖版本。 点开pom文件会看到这个: 继承了一个…

【Redis】基础数据结构-简单动态字符串SDS

C语言字符串 char *str "redis"; // 可以不显式的添加\0,由编译器添加 char *str "redis\0"; // 也可以添加\0代表字符串结束C语言中使用char*字符数组表示字符串,‘\0’来标记一个字符串的结束,不过在使用的过程中我…

自动驾驶传感器技术

自动驾驶传感器技术是自动驾驶系统的关键组成部分,它使车辆能够感知并理解周围环境。本文将深入探讨自动驾驶传感器技术,包括常见类型、工作原理以及它们在自动驾驶中的作用。 1. 摄像头 摄像头的工作原理 摄像头是基于光学原理的传感器,其…

【数组】二分查找(减不减一,看初始化!)

一、力扣习题链接 704. 二分查找 - 力扣(LeetCode) 二、思路 这道题目的前提是数组为有序数组,同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的,这些都是…

防火墙-——iptables

目录 安全技术:(市场上常见的防御) 1.入侵检测机制 2.入侵防御 3.防火墙 4.防水墙 通信的五大要素和四要素 iptables 四个表 数据流程图 安装iptables iptables管理选项: 匹配条件 通用匹配规则 1.查看filter中的 INPUT表 2.清…

Docker中MySql容器的数据挂载

1.查看是否有数据卷 docker inspect mysql 说明:Name的值是随机生成的不是命令的。因此没有数据卷。 2. 目录挂载 说明:本地目录不允许简写;在执行docker runi命令时,使用-v本地目录:容器内目录可以完成本地目录挂载…

滴滴发布十一大数据:延边出行需求上涨280% 西部省份成旅游热点

今年十一假期适逢中秋佳节,在亲友团聚和长假出游的多重期盼下,超级黄金周展现强劲内需,带动多样化的消费趋势,出行热情也随之高涨。滴滴出行数据显示,打车需求相比去年同期上涨80%,高峰时段每分钟呼叫突破1…

2019架构真题2020案例(四十七)

数据存储在中央仓库,处理流程独立,交互性好数据和处理耦合在一起,每次修改需要重启劣势:需要通过连接组件进行连接,性能降低优势:支持并发通过仓库连接组件访问,效率高 (8分)缓存中存储当前的热…

深度学习-卷积神经网络-ResNET

文章目录 前言1.resnet2.作者3.精度(TOP-5)4.论文一览5.竞赛排名6.网络退化7.残差8.残差 1.作者 前言 本文来自B站: ResNet深度残差网络 1.resnet 2.作者 3.精度(TOP-5) 4.论文一览 5.竞赛排名 6.网络退化 ResNet解…

12P4375X042-233C KJ2005X1-BA1 CE3007 EMERSON servo controller

12P4375X042-233C KJ2005X1-BA1 CE3007 EMERSON servo controller 我们提供三种不同类别的EDGEBoost I/O模块供选择,以实现最大程度的I/O定制: 数字和模拟输入/输出网络和连接边缘人工智能和存储 利用EDGEBoost I/O实现变革性技术 EBIO-2M2BK EBIO-2M2BK载板支持…