我正在努力理解一个概念,但我不知道如何去理解它。我真的很感激你的帮助。
我想做的是从逗号分隔的文本文件中提取数据,然后使用我提取的数据创建另一个对象。例如,我想使用时薪来确定每周40小时的周工资。如果我用{get;set;}从文本文件中提取时薪,有没有办法说"weeklyWage=hourlyWage*40"?
public class employee
{
public double hourlyWage { get; set; }
public double weeklyWage = hourlyWage * 40;
}
错误:字段初始值设定项无法引用非静态字段
这里的问题与编译器不知道hourlyWage属性在字段weeklyWage初始化时的值有关;所以它会给你一个错误。它(weeklyWage的值(假定是在解析文本文件或动态计算时从代码中设置的。所以你有两个简单的选择:
-
您可以使用小时工资设置器:
public class employee { // This is "backing field" for hourly wage private double _hourlyWage; // And this is actual property, where business logic happens public double hourlyWage { get { return _hourlyWage; } set { // Set both _hourlyWage and weeklyWage at once _hourlyWage = value; weeklyWage = _hourlyWage * 40; } } // Public for get, private for set (r public double weeklyWage { get; private set; } }
-
或者您可能想要使用动态getter:
public class employee { public double hourlyWage{get;set;} public double weeklyWage { get { return hourlyWage * 40; } } // "modern" getter syntax would look this way: // public double weeklyWage => hourlyWage * 40; // Still used "old" syntax for being more expressive. // The choice is yours. }
我更喜欢第一种方法,因为weeklyWage的值在设置hourlyWage时计算一次。