访问自动实现的属性的私有字段

时间:2016-05-09 14:49:36

标签: c# properties

下面,当我尝试使用_currentTemp变量时,应该通过自动属性功能自动生成,我得到一个未找到变量的消息:

  

当前上下文中不存在名称_currentTemp

使用{ get; set; }会自动创建此私有变量(_currentTemp),对吗?

public class DogTemperature
{
    public double CurrentTemp { get; set; }

    public DogTemperature(double dCurrentTemp)
    {
        _currentTemp = dCurrentTemp;  //***this line***
    }
}

3 个答案:

答案 0 :(得分:8)

由自动属性创建的备份字段不可用于在源代码中进行交互,因为它是由编译器生成的。

如果您想与支持字段进行交互,则需要以详细的方式创建属性。

答案 1 :(得分:-2)

基于@Alex Gravely的回答......

如果我理解您对完整属性的必要性:您可以创建完整属性并支持这样的字段:

private double _currentTemp;

public double CurrentTemp
{
     get { return _currentTemp; }
     set { _currentTemp = value; }
}

然后在DogTemperature的构造函数中,您只需将CurrentTemp设置为传入的double:

public void DogTemperature(double temp)
{
    DogTemperature = temp;
}

取决于您想要从CurrentTemp属性中获取的用途 - 即在视图中显示并更新它;您可能想要阅读实施INotifyPropertyChanged。这是一个链接:https://msdn.microsoft.com/en-us/library/ms229614(v=vs.100).aspx

如果它只是一个普通的旧财产,而不是用于任何特殊的财产(例如在模型中);

public double DogTemperature { get; set; }

属性就足够了;如上所述在构造函数中设置它。

希望这有帮助!

答案 2 :(得分:-2)

在我看来,如果您想要做的就是存储一个值,那么定义这样的属性是完全没有意义的。

double _currentTemp;
public double CurrentTemp
{
   get { return _currentTemp; }
   set { _currentTemp = value; }
}

你在这里所做的就是给私人语境两种设置相同价值的方法。您可以直接设置_currentTemp字段,也可以设置设置_currentTemp字段的CurrentTemp属性。如果您没有对该属性进行任何操作,那么只需使用默认的get / set,如下所示:

public double CurrentTemp { get; set; }

如果您需要在属性中执行更复杂的工作,请继续并定义这样的字段。更复杂的工作,如条件,计算或提升事件:

double _currentTempFarenheit;
double _currentTempCelcius;

public double CurrentTemp
{
   get 
   { 
       if(UseFarenheit)
           return _currentTempFarenheit;
       else
           return _currentTempCelcius;
   }
   set 
   { 
       if(UseFarenheit)
           _currentTempFarenheit = value;
       else
            currentTempCelcius = value;
   }
}

此外,如果您只希望属性的值由DogTemperature类的构造函数设置,那么您应该将setter设为私有。这只会允许公开阅读该属性。

public double CurrentTemp { get; private set; }