抽象方法
亲爱的读者,本文是 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”方法来计算付款。
因此用户只关心员工的工资和产出,而不必了解工资是如何计算的。