使用 C# 学习面向对象编程:第 8 部分

抽象方法

亲爱的读者,本文是 OOP 的第四大支柱,也是最后一大支柱。对于 OOP 初学者来说,这很容易让人困惑。因此,我们用非常简单的语言提供了一个示例。

“抽象用于管理复杂性。无法创建抽象类的对象。抽象类用于继承。”

例如

当我们开车时,我们经常需要换挡,但我们并不关心车辆发动机的内部细节。对我们来说重要的是我们必须换挡,仅此而已。这是一个抽象概念;它只显示对用户重要的细节。

例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace @abstract // 命名空间,用于组织代码
{class Program // 主程序类{// 抽象类Payabstract class Pay{protected int _basicpay = 20000; // 基本工资protected int _houserent = 15000; // 房屋租金津贴protected int _Tax = -500; // 税protected int _NetPay = -500; // 净工资// 抽象属性gradtwopublic abstract int gradtwo { get; }// 抽象属性gradonepublic abstract int gradone { get; }}// 派生类Netpay,继承自Payclass Netpay : Pay{// 计算净工资的方法public void CalculatePay(){_NetPay = _basicpay + _houserent + _Tax; // 计算净工资}// 重写抽象属性gradtwopublic override int gradtwo{get{return _NetPay; // 返回净工资}}// 重写抽象属性gradonepublic override int gradone{get{return _NetPay = _NetPay + _NetPay * 10 / 100; // 返回净工资加上10%的涨幅}}}// 主程序入口点static void Main(string[] args){Netpay o = new Netpay(); // 创建Netpay类的实例oo.CalculatePay(); // 调用CalculatePay方法计算净工资// 输出Officer Grad II和Officer Grad I的工资Console.WriteLine("Officer Grad II pay = {0} \nOfficer Grad I pay = {1}", o.gradtwo, o.gradone);Console.ReadKey(); // 等待用户按下任意键,以防程序立即退出}}
}

输出


亲爱的读者,我需要你对此格外关注。

步骤1

// 抽象类Pay
abstract class Pay
{// 基本工资protected int _basicpay = 20000;// 房屋租金津贴protected int _houserent = 15000;// 税protected int _Tax = -500;// 净工资protected int _NetPay = -500;// 抽象属性gradtwopublic abstract int gradtwo { get; }// 抽象属性gradonepublic abstract int gradone { get; }
}

我定义了一个抽象类“pay”,它有一个受保护的变量,只能由同一个类或派生类访问。这些成员变量都是用值初始化的。

第2步

class Netpay : Pay
{public void CalculatePay(){_NetPay = _basicpay + _houserent + _Tax;}public override int gradtwo // Overriding property{get{return _NetPay;}}public override int gradone // Overriding property{get{return _NetPay = _NetPay + _NetPay * 10 / 100;}}
}

在这一步中,我们定义了从抽象基类“pay”派生的类“Netpay”。

在该类中,我们已将“CalculatePay”方法定义为具有公共访问修饰符以计算员工的工资。在工资计算过程中,我们使用了来自基类的受保护变量。在这里,我们重写了两个属性“grade”和“grade two”,它们将返回“_NetPay”的值。

步骤3

// 主程序入口点
static void Main(string[] args)
{// 创建Netpay类的实例oNetpay o = new Netpay();// 调用CalculatePay方法计算净工资o.CalculatePay();// 输出Officer Grad II和Officer Grad I的工资Console.WriteLine("Officer Grad II pay = {0} \nOfficer Grad I pay = {1}", o.gradtwo, o.gradone);// 等待用户按下任意键,以防程序立即退出Console.ReadKey();
}

在无效主会话中,我们创建了“Netpay”类的对象。使用该对象,我们调用“CalculatePay”方法来计算付款。

因此用户只关心员工的工资和产出,而不必了解工资是如何计算的。

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

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

相关文章

降噪领夹麦克风哪个牌子好?揭秘无线领夹麦克风哪个降噪好

相信很多新手视频创作者都有一个疑问:为什么别人的视频或者直播音质这么清晰,几乎没什么噪音呢?其实最主要的就是麦克风的原因,相机或手机内置的麦克风是无法提供高质量的音频记录以及很好的指向性的。 想要拍摄出来的视频作品拥有…

LeetCode 验证二叉搜索树

//(lower,upper)这是一个不断更新维护的区间,为什么要更新维护 //为了保证二叉搜索树的正确性,需要根节点左子树的所有值都小于根节点,右子树的所有节点的值呀大于根节点 //lower维护的是当…

C#类库打包支持多个版本的类库

修改csproj <Project Sdk"Microsoft.NET.Sdk"><PropertyGroup><TargetFrameworks>netcoreapp3.1;net5.0;net6.0;net7.0;net8.0</TargetFrameworks><PackageId>xxxx</PackageId><Version>1.0.0</Version><Author…

每一个男人都曾有一个机器人的梦想

每一个男人都曾有一个机器人的梦想 我也有 每一个男人都曾有一个机器人的梦想。对于我来说&#xff0c;这个梦想始于童年时代&#xff0c;那时变形金刚风靡一时&#xff0c;几乎所有80后的孩子都为之疯狂。我是80后中的一员&#xff0c;那时候的科技还远没有如今这般发达&#…

《现代通信原理与技术》码间串扰和​​​​​​​无码间串扰的眼图对比实验报告

实 验&#xff1a;码间串扰和无码间串扰的眼图对比实验报告 摘 要&#xff1a; 在数字通信系统中&#xff0c;码间串扰&#xff08;Inter-Symbol Interference, ISI&#xff09;是影响信号质量和系统性能的重要因素之一。本实验通过MATLAB软件生成并对比了受码间串扰影响和未…

【测试相关工作】

1.测试对象及意义 测试对象&#xff1a;每个公司都有自己的产品&#xff08;软硬件&#xff09;&#xff0c;针对这一产品开展的一系列工作。 虽然每个公司产品都不一样&#xff0c;但测试的工作和流程都大同小异啦&#xff5e;都是为了让自己的产品符合甲方需求。人活着就是…

PHP框架有哪些,以及具体对比优缺点

PHP框架有很多&#xff0c;每个框架都有其特定的优势和劣势&#xff0c;适用于不同的开发场景和需求。以下是一些流行的PHP框架及其优缺点的对比&#xff1a; Laravel 优点&#xff1a; 优雅的语法和丰富的功能。强大的ORM&#xff08;Eloquent&#xff09;简化数据库交互。拥…

数据驱动和vue的双向绑定有何异同

相同点 数据驱动&#xff1a; 小程序和Vue都采用了数据驱动的方式&#xff0c;即数据的变化会直接导致视图的变化。这是现代前端框架的一个重要特性&#xff0c;它允许开发者更加关注数据本身&#xff0c;而不是手动去操作DOM。自动同步&#xff1a; 当数据发生变化时&#xf…

华为昇腾异构计算架构CANN及AI芯片简介

异构计算架构CANN 异构计算架构CANN&#xff08;Compute Architecture for Neural Networks&#xff09;是华为针对AI场景推出的异构计算架构&#xff0c;向上支持多种AI框架&#xff0c;包括MindSpore、PyTorch、TensorFlow等&#xff0c;向下服务AI处理器与编程&#xff0c;…

Open To Buy(OTB)计划:零售业者的库存管理利器

在当今快速变化的服装市场中&#xff0c;如何高效、精准地进行商品管理成为了服装企业竞争的关键。OTB&#xff08;Open-to-Buy&#xff09;作为一种有效的商品管理方法&#xff0c;在企业管理中扮演着至关重要的角色。它基于预算、商品计划以及市场需求等多维度因素&#xff0…

Android开发系列(二)Jetpack Compose 之Text控件

Jetpack Compose是一种全新的声明式UI框架&#xff0c;用于构建Android应用程序。Jetpack Compose Text控件是Compose中用于显示文本的基本UI组件。 Text是一个可组合函数&#xff0c;函数声明如下所示。 Composable fun Text(text: String,modifier: Modifier Modifier,colo…

ROS 机器人控制(Python实现)

ROS 机器人控制&#xff08;Python实现&#xff09; 实现思路 构建一个新的软件包&#xff0c;包名叫做vel_pkg在软件包中新建一个节点&#xff0c;节点名叫做vel_node.py在节点中&#xff0c;向ROS大管家rospy申请发布话题/cmd_vel&#xff0c;并拿到发布对象vel_pub构建一个…

cmake、make、makefile、ninga的关系

CMake是一种跨平台的构建系统&#xff0c;它用来管理软件的编译过程。CMake可以生成本地平台特定的构建文件&#xff0c;例如Makefile或者Microsoft Visual Studio项目文件&#xff0c;以便开发人员更轻松地在不同的平台上构建他们的项目。它的主要功能是配置和生成构建脚本&am…

AGI 远不止 ChatGPT!一文入门 AGI 通识及应用开发

AI 大语言模型进入爆发阶段 2022 年 12 月 ChatGPT 突然爆火&#xff0c;原因是其表现出来的智能化已经远远突破了我们的常规认知。虽然其呈现在使用者面前仅仅只是一个简单的对话问答形式&#xff0c;但是它的内容化水平非常强大&#xff0c;甚至在某些方面已经超过人类了&am…

k8s上使用ConfigMap 和 Secret

使用ConfigMap 和 Secret 实验目标&#xff1a; 学习如何使用 ConfigMap 和 Secret 来管理应用的配置。 实验步骤&#xff1a; 创建一个 ConfigMap 存储应用配置。创建一个 Secret 存储敏感信息&#xff08;如数据库密码&#xff09;。在 Pod 中挂载 ConfigMap 和 Secret&am…

面试专区|【85道Dubbo高频题整理(附答案背诵版)】

简述什么是Dubbo&#xff08; 概念 &#xff09; &#xff1f; Dubbo是一个分布式服务框架&#xff0c;它提供了高性能和透明化的RPC远程服务调用方案以及SOA服务治理方案。Dubbo致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA服务治理方案&#xff0c;使…

计算机视觉全系列实战教程:(八)图像变换-点运算、灰度变换、直方图变换

图像变换&#xff1a;点运算、灰度变换、直方图变换 1.点运算(1)What(2)Why 2.灰度变换(1)What(2)Why(作用)(3)Which(有哪些灰度变换&#xff09; 3.直方图修正(1)直方图均衡化 1.点运算 (1)What 通过点运算&#xff0c;输出图像的每个像素的灰度值仅仅取决于输入图像中相对应…

Flask定制命令

Flask定制命令 将函数或方法定制成命令行代码 # 关键字绑定i click.argument(id) app.cli.command(create_user) # 将i作为参数 def create_user(id):conn pymysql.connect(userroot,password"777",host127.0.0.1,databaseflaskdemo,port3306,autocommitFalse)cur…

回文平方数 Palindromic Squares

题目描述 回文数是指从左向右念和从右向左念都一样的数。如 12321 就是一个典型的回文数。 给定一个用十进制表示的正整数 B&#xff0c;输出所有 [1,300] 中&#xff0c;它的平方用 B 进制表示时是回文数的数。 输入格式 共一行&#xff0c;一个单独的正整数 B。 输出格式…

一些常见的显示接口

以下是一些常见的显示接口&#xff0c;包括 MIPI、mini-LVDS、LVDS、HDMI、DisplayPort 等&#xff0c;它们在用途、使用范围、传输速率等方面有所不同。以下表格详细对比了这些接口&#xff1a; 接口类型主要用途使用范围传输速率传输距离备注MIPI DSI移动设备显示接口&#…