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

在这里插入图片描述

继承(Inheritance)、封装(Encapsulation)和多态(Polymorphism)是面向对象编程中的三大核心概念,它们构成了面向对象编程的基础,有助于创建更加模块化、可扩展和可维护的代码。这三个概念在C#及其他面向对象编程语言中广泛应用,本文将详细解释这三个概念的含义、特点、作用以及在C#中的应用。

1. 继承的概念与特点

继承是面向对象编程中的一种重要关系,它允许一个类(子类、派生类)继承另一个类(父类、基类)的属性和方法。通过继承,子类可以复用父类的代码,并可以在此基础上添加、修改或覆盖特定的行为。继承在C#中通过:符号来表示。

继承的特点:

  • 代码复用: 继承允许子类重用父类的代码,避免了重复编写相同的代码。
  • 派生与扩展: 子类可以在父类的基础上进行扩展,添加新的属性和方法,从而实现新的功能。
  • 层次结构: 继承关系可以形成类的层次结构,使得代码更加有组织、易于理解和维护。
  • 多态支持: 继承是多态的基础,通过子类对象可以实现对父类方法的重写,实现不同对象的不同行为。

以下是一个简单的继承示例:

class Animal
{public void Eat(){Console.WriteLine("Animal is eating.");}
}class Dog : Animal
{public void Bark(){Console.WriteLine("Dog is barking.");}
}

在上述代码中,我们定义了一个名为Animal的父类,以及一个名为Dog的子类。Dog类继承了Animal类的Eat方法,并新增了自己的Bark方法。

2. 封装的概念与特点

封装是面向对象编程的重要原则,它指的是将类的内部数据和实现细节隐藏起来,只暴露必要的接口供外部访问。封装通过访问修饰符来实现,如publicprivateprotected等。

封装的特点:

  • 信息隐藏: 封装将类的内部实现细节隐藏起来,外部只能通过接口来访问类的属性和方法,不关心实现细节。
  • 安全性增强: 通过限制外部访问,可以防止不合理的修改和操作,提高了代码的安全性。
  • 易维护性: 封装可以使代码的实现细节与外部接口分离,使得代码更加模块化,便于维护和升级。

以下是一个简单的封装示例:

class BankAccount
{private double balance;public void Deposit(double amount){if (amount > 0){balance += amount;}}public double GetBalance(){return balance;}
}

在上述代码中,我们定义了一个名为BankAccount的类,其中balance成员变量被声明为私有,只能通过DepositGetBalance方法来访问。

3. 多态的概念与特点

多态是面向对象编程的一个重要概念,它允许不同类的对象对相同的消息做出响应,表现出不同的行为。多态通过方法的重写和基类引用指向派生类对象来实现。

多态的特点:

  • 统一接口: 多态允许使用相同的接口来调用不同类的对象,提供了一种统一的调用方式。
  • 代码重用: 多态通过方法的重写,使得不同类可以共享相同的接口和方法名,减少了重复编写代码。
  • 动态绑定: 多态的方法调用在运行时动态决定,而不是在编译时固定,使得程序更加灵活。

以下是一个简单的多态示例:

class Shape
{public virtual void Draw(){Console.WriteLine("Drawing a shape.");}
}class Circle : Shape
{public override void Draw(){Console.WriteLine("Drawing a circle.");}
}class Square : Shape
{public override void Draw(){Console.WriteLine("Drawing a square.");}
}

在上述代码中,我们定义了一个基类Shape,以及两个派生类CircleSquare。通过多态,我们可以使用相同的方法名Draw来调用不同类的不同行为。

4. 继承、封装和多态在 C Sharp 中的应用

继承的应用

  • 代码复用与模块化: 继承允许子类复用父类的代码,从而避免了重复编写相同的代码,使代码更加模块化。
  • 扩展功能: 子类可以在父类的基础上进行扩展,添加新的属性和方法,实现新的功能,从而提高了代码的可扩展性。

封装的应用

  • 数据保护与访问控制: 封装可以将类的内部数据隐藏起来,只暴露必要的接口,保护数据不受外部随意访问和修改,提高了代码的安全性。
  • 接口简化: 封装可以将复杂的内部实现细节隐藏,提供更加简洁的外部接口,使得使用者不需要了解内部的复杂逻辑。

多态的应用

  • 代码统一性: 多态允许使用相同的接口来处理不同类的对象,提供了一种统一的调用方式,使代码更加清晰、简洁。
  • 扩展性: 在多态的基础上,可以方便地扩展新的类,实现新的功能,而不需要修改现有的代码。
  • 可替代性: 多态允许通过基类引用指向派生类对象,从而实现接口的可替代性,使得代码更加灵活。

5. 继承、封装和多态的关系与权衡

继承、封装和多态是面向对象编程的三大支柱,它们之间有着紧密的关系,同时也需要在使用时进行权衡。

  • 继承与封装: 继承可以导致父类的实现细节暴露给子类,因此需要注意在设计父类时,要将公共接口和内部实现区分开,以保持封装的原则。

  • 继承与多态: 继承为多态提供了基础,通过重写父类的方法,子类可以实现不同的行为。同时,过度的继承层次也可能导致继承关系变得复杂,影响代码的可维护性。

  • 封装与多态: 封装提供了一个清晰的外部接口,多态通过这个接口实现不同的行为。封装保护了内部实现细节,使得多态的变化不会影响外部接口。

6. 总结

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

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

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

相关文章

【教程】零成本将小米净化器改造为无叶风扇

某宝某多上,就这么点破塑料,就要买79?!! 我这枚韭菜可不上当。咱自己做一个! 真香~

ansible的playbook剧本

playbook剧本 PlayBook1.playbooks 本身由以下各部分组成2.示例:3.运行playbook补充参数: 4.定义、引用变量5.指定远程主机sudo切换用户6.when条件判断7.迭代8.Templates 模块1.先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量2…

【Java】2021 RoboCom 机器人开发者大赛-高职组(初赛)题解

7-1 机器人打招呼 机器人小白要来 RoboCom 参赛了,在赛场中遇到人要打个招呼。请你帮它设置好打招呼的这句话:“ni ye lai can jia RoboCom a?”。 输入格式: 本题没有输入。 输出格式: 在一行中输出 ni ye lai can jia Robo…

Cesium--一些实验过程中的效果记录

1.一种反射效果: 片元着色器代码 fragmentShaderSource:in vec3 v_positionMC;in vec3 v_positionEC;in vec2 v_st;void main(){czm_materialInput materialInput;vec3 normalEC normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), ve…

Hands on RL 之 Deep Deterministic Policy Gradient(DDPG)

Hands on RL 之 Deep Deterministic Policy Gradient(DDPG) 文章目录 Hands on RL 之 Deep Deterministic Policy Gradient(DDPG)1. 理论部分1.1 回顾 Deterministic Policy Gradient(DPG)1.2 Neural Network Difference1.3 Why i…

Vue数组变更方法和替换方法

一、可以引起UI界面变化 Vue 将被侦听的数组的变更方法进行了包裹,所以它们也将会触发视图更新。这些被包裹过的方法包括: push()pop()shift()unshift()splice()sort()reverse() 以上七个数组都会改变原数组,下面来分别讲解它们的区别&…

Electron 应用实现截图并编辑功能

Electron 应用实现截图并编辑功能 Electron 应用如何实现截屏功能,有两种思路,作为一个框架是否可以通过框架实现截屏,另一种就是 javaScript 结合 html 中画布功能实现截屏。 在初步思考之后,本文优先探索使用 Electron 实现截屏…

C++11实用技术(四)for循环该怎么写

普通用法 在C遍历stl容器的方法通常是&#xff1a; #include <iostream> #include <vector>int main() {std::vector<int> arr {1, 2, 3};for (auto it arr.begin(); it ! arr.end(); it){std::cout << *it << std::endl;}return 0; }上述代…

Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法

Word 2019打开.doc文档后图片和公式不显示&#xff08;呈现为白框&#xff09;的解决办法 目录 Word 2019打开.doc文档后图片和公式不显示&#xff08;呈现为白框&#xff09;的解决办法一、问题描述二、解决方法1.打开 WORD 2019&#xff0c;点击菜单中的“文件”&#xff1b;…

【笔试题心得】排序算法总结整理

排序算法汇总 常用十大排序算法_calm_G的博客-CSDN博客 以下动图参考 十大经典排序算法 Python 版实现&#xff08;附动图演示&#xff09; - 知乎 冒泡排序 排序过程如下图所示&#xff1a; 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。对每一对相邻…

杨氏矩阵!!!!

杨氏矩阵&#x1f438; &#x1f4d5;题目要求&#xff1a; 杨氏矩阵 题目内容&#x1f4da;&#xff1a; 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 &#x1f9e0;题…

Microsoft ISA服务器配置及日志分析

Microsoft ISA 分析器工具&#xff0c;可分析 Microsoft ISA 服务器&#xff08;或 Forefront 威胁管理网关服务器&#xff09;的日志并生成安全和流量报告。支持来自 Microsoft ISA 服务器组件的以下日志&#xff1a; 数据包过滤器ISA 服务器防火墙服务ISA 服务器网络代理服务…

24届近3年青岛理工大学自动化考研院校分析

今天给大家带来的是青岛理工大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、青岛理工大学 学校简介 青岛理工大学是一所以工为主&#xff0c;土木建筑、机械制造、环境能源学科特色鲜明&#xff0c;理工经管文法艺等学科协调发展的多科性大学。是国家首批地方…

安达发APS|APS排产软件之计划甘特图

在当今全球化和竞争激烈的市场环境下&#xff0c;制造业企业面临着巨大的压力&#xff0c;如何在保证产品质量、降低成本以及满足客户需求的同时&#xff0c;提高生产效率和竞争力成为企业需要迫切解决的问题。在这个背景下&#xff0c;生产计划的制定和执行显得尤为重要。然而…

LCS最大公共子序列 与 LIS最大递增子序列

LCS Largest Common Subsequence 最大公共子序列 /* Input s1 s2//两个字符串Output length//长度 ans//具体字母 */ #include<iostream> using namespace std; int main() {string s1,s2;cin>>s1>>s2;int dp[100][100]{0};//dp[i][j]表示s1取前i位&#x…

(二)结构型模式:5、装饰器模式(Decorator Pattern)(C++实例)

目录 1、装饰器模式&#xff08;Decorator Pattern&#xff09;含义 2、装饰器模式的UML图学习 3、装饰器模式的应用场景 4、装饰器模式的优缺点 5、C实现装饰器模式的简单实例 1、装饰器模式&#xff08;Decorator Pattern&#xff09;含义 装饰模式&#xff08;Decorato…

【软件工程】面向对象方法-RUP

RUP&#xff08;Rational Unified Process&#xff0c;统一软件开发过程&#xff09;。 RUP特点 以用况驱动的&#xff0c;以体系结构为中心的&#xff0c;迭代增量式开发 用况驱动 用况是能够向用户提供有价值结果的系统中的一种功能用况获取的是功能需求 在系统的生存周期中…

前后端分离------后端创建笔记(05)用户列表查询接口(上)

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论&#xff0c;如有侵权请联系 源码&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…

css3 瀑布流布局遇见截断下一列展示后半截现象

css3 瀑布流布局遇见截断下一列展示后半截现象 注&#xff1a;css3实现瀑布流布局简直不要太香&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e; 场景-在uniapp项目中 当瀑布流布局column-grap:10px 相邻两列之间的间隙为10px&#xff0c;column-count:2,2列展…

数据结构入门指南:二叉树

目录 文章目录 前言 1. 树的概念及结构 1.1 树的概念 1.2 树的基础概念 1.3 树的表示 1.4 树的应用 2. 二叉树 2.1 二叉树的概念 2.2 二叉树的遍历 前言 在计算机科学中&#xff0c;数据结构是解决问题的关键。而二叉树作为最基本、最常用的数据结构之一&#xff0c;不仅在算法…