字段初始值设定项无法引用非静态字段:正在从{get;set;}结果创建对象



我正在努力理解一个概念,但我不知道如何去理解它。我真的很感激你的帮助。

我想做的是从逗号分隔的文本文件中提取数据,然后使用我提取的数据创建另一个对象。例如,我想使用时薪来确定每周40小时的周工资。如果我用{get;set;}从文本文件中提取时薪,有没有办法说"weeklyWage=hourlyWage*40"?

public class employee 
{
public double hourlyWage { get; set; }  
public double weeklyWage = hourlyWage * 40;
}

错误:字段初始值设定项无法引用非静态字段

这里的问题与编译器不知道hourlyWage属性在字段weeklyWage初始化时的值有关;所以它会给你一个错误。它(weeklyWage的值(假定是在解析文本文件或动态计算时从代码中设置的。所以你有两个简单的选择:

  1. 您可以使用小时工资设置器:

    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; }
    }
    
  2. 或者您可能想要使用动态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时计算一次。

最新更新