【发布时间】:2021-04-27 01:41:33
【问题描述】:
我已经编程了很短的时间,所以如果这是错误的提问方式,或者我使用的术语不正确,我深表歉意。
我正在使用类及其组件,但似乎无法获得有条件的属性才能工作。它是 Employee 类中的 MonthlySalary 属性。它应该防止小于 0 的值返回,但它不起作用并允许显示负值。
我还包含了使用该类的主要方法,因为我不确定这是否是问题的一部分。
感谢您的宝贵时间,我们将不胜感激。
class Employee
{
private decimal _monthlySalary; //// private field
public string FirstName { get; set; } //public field using auto constructor
public string LastName { get; set; } // public field using auto constructor
public Employee(string firstName, string lastName, decimal monthlySalary) // Constructor
{
FirstName = firstName;
LastName = lastName;
_monthlySalary = monthlySalary;
}
public decimal MonthlySalary //property
{
get { return _monthlySalary; }
set
{
if (value > 0.0m)
{
_monthlySalary = value;
}
else
{
_monthlySalary = 0.0m;
}
}
}
public decimal YearlySalary() //method
{
return MonthlySalary * 12;
}
public decimal Raise() //method
{
return YearlySalary() * 1.10m;
}
}
}
class EmployeeTest
{
static void Main(string[] args)
{
string firstName, lastName;
decimal monthlySalary;
Console.WriteLine("Enter Employee's first name: ");
firstName = Console.ReadLine();
Console.WriteLine("Enter Employee's last name: ");
lastName = Console.ReadLine();
Console.WriteLine($"Enter monthly salary for employee {firstName} {lastName}");
monthlySalary = decimal.Parse(Console.ReadLine());
Employee one = new Employee(firstName, lastName, monthlySalary);
Console.WriteLine("Employee Name: {0} {1}", one.FirstName, one.LastName);
Console.WriteLine("Employee monthly salary: {0:C}", one.MonthlySalary);
Console.WriteLine("Employee annual salary: {0:C}", one.YearlySalary());
Console.WriteLine("Yearly Salary after raise: {0:C}", one.Raise());
Console.WriteLine("Enter Employee's first name: ");
firstName = Console.ReadLine();
Console.WriteLine("Enter Employee's last name: ");
lastName = Console.ReadLine();
Console.WriteLine($"Enter monthly salary for employee {firstName} {lastName}");
monthlySalary = decimal.Parse(Console.ReadLine());
Employee two = new Employee(firstName, lastName, monthlySalary);
Console.WriteLine("Employee Name: {0} {1}", two.FirstName, two.LastName);
Console.WriteLine("Employee monthly salary: {0:C}", two.MonthlySalary);
Console.WriteLine("Employee annual salary: {0:C}", two.YearlySalary());
Console.WriteLine("Yearly salary after raise: {0:C}", two.Raise());
}
}
}
【问题讨论】:
-
更改:_monthlySalary =monthlySalary;到 MonthlySalary = 月薪;
-
您需要在构造函数中写入
MonthlySalary = monthlySalary;,否则不会调用setter,因此当您通过此处传递参数创建新实例时直接分配该字段而无需任何控制/验证:new Employee(firstName, lastName, --> monthlySalary <--);
标签: c# properties conditional-statements