C# 属性不返回我在 set 访问器处更改的值



属性:

public double TotalFee
{ 
get { return totalfee; }
set
{
if ((course == "C#") || (course == "c#")) { totalfee = 2000; }
else { totalfee = 3000; }
}
} 

我创建了一个名为totalfee的变量:'private double totalfee;',一开始我没有分配任何值,当我在程序中调用该属性时,返回0。即使我为totalfee提供了一个预先值,它也只返回该值,而不符合我所设定的任何条件。其想法是,当用户输入课程:c#时,它将返回总费用2000的值;如果他输入另一个课程,它将返回总费用3000的值。:/

听起来根本不需要私有字段。你可以把所有的逻辑都放在getter中:

public double TotalFee
{ 
get
{
if ((course == "C#") || (course == "c#")) { return 2000; }
else { return 3000; }
}
} 

如果TotalFee不是要直接更改的,那么设置TotalFee的代码应该在Course setter中,而不是TotalFee-setter中。例如:

public double TotalFee
{ 
get { return totalfee; }
}
public string Course
{
get { return course; }
set
{
course = value;
if ((course == "C#") || (course == "c#")) { totalfee = 2000; }
else { totalfee = 3000; }
}
}

当您第一次调用double而不首先为其赋值(设置(时,其默认值为零。这就是您在运行代码时看到此值的原因。只有在设置属性值(例如myclass.myproperty = 1(时,程序才会通过"设置"逻辑运行。

您的案例的解决方案是简单地将您的逻辑放在get方法上,这样当您访问TotalFee时,逻辑就会生效。

最新更新