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

抽象方法

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

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

例如

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

例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace @abstract // 命名空间,用于组织代码
{
    class Program // 主程序类
    {
        // 抽象类Pay
        abstract class Pay
        {
            protected int _basicpay = 20000; // 基本工资
            protected int _houserent = 15000; // 房屋租金津贴
            protected int _Tax = -500; // 税
            protected int _NetPay = -500; // 净工资
            // 抽象属性gradtwo
            public abstract int gradtwo { get; }
            // 抽象属性gradone
            public abstract int gradone { get; }
        }

        // 派生类Netpay,继承自Pay
        class Netpay : Pay
        {
            // 计算净工资的方法
            public void CalculatePay()
            {
                _NetPay = _basicpay + _houserent + _Tax; // 计算净工资
            }

            // 重写抽象属性gradtwo
            public override int gradtwo
            {
                get
                {
                    return _NetPay; // 返回净工资
                }
            }

            // 重写抽象属性gradone
            public override int gradone
            {
                get
                {
                    return _NetPay = _NetPay + _NetPay * 10 / 100; // 返回净工资加上10%的涨幅
                }
            }
        }

        // 主程序入口点
        static void Main(string[] args)
        {
            Netpay o = new Netpay(); // 创建Netpay类的实例o
            o.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;

    // 抽象属性gradtwo
    public abstract int gradtwo { get; }
    // 抽象属性gradone
    public 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类的实例o
    Netpay 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”方法来计算付款。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pytest并发执行时token异常处理问题

接前面加入钩子函数处理token复用的问题,只保证了用例的串联执行,我的部分测试用例中接入了通义千问的部分接口生成测试数据,七八个场景跑完差不多快要10分钟。考虑使用并发执行。 http://t.csdnimg.cn/ACexL 使用多线程和不使用耗时差距很大…

Unity2D游戏制作入门 | 13 ( 之人物三段攻击 )

上期链接:Unity2D游戏制作入门 | 12(之人物受伤和死亡的逻辑动画)-CSDN博客 上期我们聊了人物的受伤和死亡的逻辑和动画,我们主要学习了事件的执行,即我们在人物受伤时可能会触发很多的事件,比如触发人物受伤的动画以及播放音乐等…

一文了解Java 中的String、StringBuffer 与StringBuilder

String结构剖析 String是final 类,不能被其他的类继承 String有属性private final char vaLue[]; 用于存放字符串内容 注意: value 是个final类型, 不可以修改: 即value不能指向新的地址,但是单个字符内容是可以变化 两种创建String对象的区…

初学者必看的web前端开发学习路线,干货满满!

初学者必看的web前端开发学习路线,干货满满! 随着互联网的深入发展,前端工程师这个岗位在市场上的需求,薪资也是很可观的。前端很火,想自学前端的人也很多。包括一些学生、上班族、以前的UI,java,或完全零基础&#xf…

数据库系统概论(个人笔记)(第四部分)

数据库系统概论(个人笔记) 文章目录 数据库系统概论(个人笔记)4、中间的SQL4.1 连接表达式4.2 视图4.3 事务4.4 完整性约束4.5 SQL数据类型和模式4.6 SQL中的索引定义4.7 授权 4、中间的SQL 4.1 连接表达式 Join Expressions Join…

C++之模板(一)

1、为什么需要模板 将具有相同逻辑的一段代码提供一份模板,当我们需要处理不同类型的时候,可以通过数据类型当作参数来传递,从而实例化出对应类型的处理版本。 2、模板的定义 也是一种静态多态。 3、模板的分类 4、函数模板 5、函数模板的使…

夏季家里粉尘螨虫满天飞?一招搞定!好用家用空气净化器品牌分享

每到夏季,是家中尘螨滋生的高发期。夏季无论是开窗通风还是关窗开空调,都很容易造成空气中的浮尘堆积,不注意卫生清洁,容易滋生细菌、尘螨。 易过敏、体质弱的人群长时间在空气污染环境中,很容易就会过敏或者发生其他…

openh264 SVC 时域分层原理介绍

openh264 OpenH264是一个开源的H.264编码器,由Cisco公司开发并贡献给开源社区。它支持包括SVC(Scalable Video Coding)在内的多种编码特性,适用于实时应用场景,比如WebRTC。OpenH264项目在GitHub上是公开的&#xff0…

外链是否会增加流量?

外链确实可以间接地帮助增加网站流量,不过要了解的是这不是直接影响,首先,外链主要是提升你的网站在搜索引擎中的整体权重。简单地说,当你的网站被很多其他的网站通过dofollow链接指向时,搜索引擎会认为你的网站内容质…

如何完美解决 Xshell 使用 SSH 连接 Linux 服务器报错:找不到匹配的 host key 算法

🛠️ 如何完美解决 Xshell 使用 SSH 连接 Linux 服务器报错:找不到匹配的 host key 算法 摘要: 本文将带领大家深入学习如何解决 Xshell 使用 SSH 连接 Linux 服务器时报错“找不到匹配的 host key 算法”的问题。通过详细的操作步骤和代码案…

有什么可以创建ai聊天的软件?5个软件帮助你快速创建ai聊天

有什么可以创建ai聊天的软件?5个软件帮助你快速创建ai聊天 AI聊天软件是一种利用人工智能技术构建的聊天机器人系统,它能够模拟人类的对话方式,回答用户提出的问题或者进行对话。这类软件在各个领域都有广泛的应用,可以用于客户服…

从Instance classifier重新思考多实例学习

弱监督的WSI分类通常被形式化为多实例学习(MIL)问题,其中每张slide都被视为一个bag,从中切出的patch被视为实例。现有的方法要么通过伪标记训练实例分类器,要么通过注意力机制将实例特征聚合为bag特征,然后…

Shopee虾皮API:获取商家店铺商品列表

一、平台介绍 Shopee,作为东南亚及中国台湾地区领先的电商平台,为卖家提供了一个便捷、高效的销售渠道。作为卖家,能够将自己的商品展示在Shopee平台上,并通过平台的流量和工具,将商品销售给更多的潜在买家。 为了帮…

Elasticsearch-使用Logstash同步Mysql

1.安装logstash es服务器版本必须和logstash版本一致 7.9.2 在/usr/local/src/下新建logstash文件夹,解压 下载logstash后查看是否安装成功,在logstash的bin目录下输入指令: ./logstash -e input { stdin { } } output { stdout {} }2.my…

Java项目:基于SSM框架实现的汽车养护保养管理系统【ssm+B/S架构+源码+数据库+开题+毕业论文+任务书】

一、项目简介 本项目是一套基于SSM框架实现的汽车养护保养管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、…

【Java05】Java中的多维数组

从数组底层运行机制上看,Java没有多维数组一说。所谓多维数组,是说一个引用变量指向的元素也是引用变量。 例如,type[] arrayName是个指向type类型元素的数组。倘若type也是数组引用变量,比如int[],那么这个数组就可以…

警惕!ELSEVIER旗下1本双1区TOP被On Hold !请大家谨慎投稿

【SciencePub学术】又1本!双1区TOP刊被On Hold !官方现在对期刊质量的管控越来越严格了,被标记为On Hold后的期刊中,大部分的命运也是被WOS数据库剔除!所以请大家谨慎投稿! 《Information Sciences》作为一…

Spring Security+Spring Boot实现登录认证以及权限认证

基本概念 “Authentication(认证)”是spring security框架中最重要的功能之一,所谓认证,就是对当前访问系统的用户给予一个合法的身份标识,用户只有通过认证才可以进入系统,在物理世界里,有点类似于“拿工卡刷门禁”的…

【达梦数据库】typeorm+node.js+达梦数据库返回自增列值

1.配置环境,下载依赖包 typeorm init --name test22 --database mysql typeorm-dm,uuid,typeorm2,修改连接信息 修改src/ data-source.ts 文件 连接dm,可参考刚刚安装typeorm-dm 模块中的 README.md 3.修改自增信息 /* 修改前*/PrimaryGen…

HarmonyOS之自选股App

支持在 鸿蒙、安卓、苹果设备上运行。 1.界面效果展示 2.数据存储 数据存储采用的是官方的 ohos.data.relationalStore.relationalStore stock_code表用来存储A股市场5000多家公司的股票代码和名称等信息 const TAB_STOCK_CODE "stock_code" const CREATE_TABL…