【发布时间】:2017-03-20 18:07:03
【问题描述】:
我正在编写一个简单的练习程序,它按预期工作。然而,它让我意识到我对一个我想更彻底理解的重要领域感到模糊。我创建了一个对象(或实例?)aPay。该程序要求用户输入三个变量的值(在 Main(Program) 类中)。这些值/实例被分配给 aPay。 aPay.WorkerName、aPay.HoursWorked 和 aPay.RateOfPay。我有许多具有计算值的常量和变量,它们在 Pay 类中实例化/计算。这些是非用户输入的值。我想将其中每一个的值发送到对象 aPay,类似于对用户输入值所做的操作。我知道在这个程序中它不是必需的,但是它在更复杂的程序中很有用,我想了解如何实现这一点。我不想输出更多内容或改变程序的功能,我只想将变量(GrossPay、NetPay、FicaTax、FedTax、StateTax 和 HealthIns)的值分配给 aPay 对象。 (我不确定我是否会使用变量(grossPay、netPay、fedTax、ficaTax 等,而不是我刚刚列出的属性)。
我知道我可以通过 Pay aPay = new Pay(workerName, hoursWorked, rateOfPay, GrossPay, netPay, fedTax, ficaTax, stateTax, healthIns) 来做到这一点
或类似的东西?
aPay = { workerName, hoursWorked, rateOfPay, GrossPay, etc } ????
谁能解释我如何才能实现这一目标并专门使用我的代码提供示例代码?我将在下面列出代码:
class MainClass
{
public static void Main(string[] args)
{
Header();
Directions();
Pay aPay = new Pay();
Write("**********************************\n");
Write("Enter name: ");
aPay.WorkerName = ReadLine();
Write("Enter hours: ");
aPay.HoursWorked = double.Parse(ReadLine());
Write("Enter rate: ");
aPay.RateOfPay = double.Parse(ReadLine());
Write("**********************************\n");
//
//
//
//
//
WriteLine(aPay.ToString());
ReadLine();
}
private static void Header()
{
WriteLine("*************************************************************");
WriteLine("\t Pay");
WriteLine("\t Calculate Net Pay");
WriteLine("\t Matt Craig");
WriteLine("\t " + DateTime.Today);
WriteLine("*************************************************************");
}
private static void Directions()
{
WriteLine("This program will determine pay.");
WriteLine(" ");
WriteLine("You will be asked to enter hours worked"
+ "\n and rate of pay.");
WriteLine(" ");
WriteLine("*************************************************************");
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /p>
public class Pay
{
private string workerName;
private double hoursWorked;
private double rateOfPay;
private double grossPay;
private double netPay;
private double FICA_TAX = 0.0765;
private double FED_TAX = 0.20;
private double STATE_TAX = 0.10;
private double HEALTH_INS = 0.07;
private double ficaTax;
private double fedTax;
private double stateTax;
private double healthIns;
public Pay()
{
}
public string WorkerName
{
set
{
workerName = value;
}
}
public double HoursWorked
{
set
{
hoursWorked = value;
}
}
public double RateOfPay
{
set
{
rateOfPay = value;
}
}
private double GrossPay
{
get
{
grossPay = Math.Round((hoursWorked * rateOfPay), 2, MidpointRounding.AwayFromZero);
return grossPay;
}
}
private double NetPay
{
get
{
netPay = Math.Round((grossPay - ficaTax - fedTax - stateTax - healthIns), 2, MidpointRounding.AwayFromZero);
return netPay;
}
}
private double FicaTax
{
get
{
ficaTax = Math.Round((FICA_TAX * grossPay), 2, MidpointRounding.AwayFromZero);
return ficaTax;
}
}
private double FedTax
{
get
{
fedTax = Math.Round((FED_TAX * grossPay), 2, MidpointRounding.AwayFromZero);
return fedTax;
}
}
private double StateTax
{
get
{
stateTax = Math.Round((STATE_TAX * grossPay), 2, MidpointRounding.AwayFromZero);
return stateTax;
}
}
private double HealthIns
{
get
{
healthIns = Math.Round((HEALTH_INS * grossPay), 2, MidpointRounding.AwayFromZero);
return healthIns;
}
}
public override string ToString()
{
string stats;
stats = string.Format("Name\t\t {0} \n", workerName);
stats += string.Format("Gross Pay\t {0:c} \n", GrossPay);
stats += string.Format("FICA tax\t {0:c} \n", FicaTax);
stats += string.Format("Federal tax\t {0:c} \n", FedTax);
stats += string.Format("State tax\t {0:c} \n", StateTax);
stats += string.Format("Health Insurance {0:c} \n", HealthIns);
stats += string.Format("Net pay\t\t {0:c} \n", NetPay);
return stats;
}
}
【问题讨论】:
-
类的构造函数不就是为了这个目的吗?
-
创建一个实例并设置其属性:
aPay.WorkerName = this.workerName;等。带有所有问号的第二个代码 sn-p 应如下所示:var aPay = new Pay { WorkerName = this.workerName, HoursWorked = this.hoursWorked /* etc. */ };。你的版本看起来你可能已经做了一些 JavaScript; C# 语法在几个方面有所不同。 -
@Pankaj Kapare 分配是专门使用属性过程,而不是使用构造函数。但是我正在尝试的不是必要的,或者我不相信任务的重点。构造函数可能是实现这一目标的好方法。
标签: c# class variables object instance