如何解决为什么属性不能有条件地工作?
我编程的时间很短,所以如果这是错误的提问方式,或者我使用的术语不正确,我深表歉意。
我正在处理类及其组件,但似乎无法获得有条件的属性才能工作。它是 Employee 类中的 MonthlySalary 属性。它应该防止返回小于 0 的值,但它不起作用并允许显示负值。
我还包含了使用该类的 main 方法,因为我不确定这是否是问题的一部分。
感谢您的宝贵时间,如果您有任何建议,我们将不胜感激。
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,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());
}
}
}
解决方法
您没有在 Employee 的构造函数中执行任何验证逻辑。你可能想要
public Employee(string firstName,string lastName,decimal monthlySalary) // Constructor
{
FirstName = firstName;
LastName = lastName;
MonthlySalary = monthlySalary;
}
另一个提示是你可以使用
_monthlySalary = Math.Max(0.0m,value);
这只是一种更紧凑的方式来确保工资始终为正数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。