下面,当我尝试使用_currentTemp
变量时,应该通过自动属性功能自动生成,我得到一个未找到变量的消息:
当前上下文中不存在名称
_currentTemp
。
使用{ get; set; }
会自动创建此私有变量(_currentTemp
),对吗?
public class DogTemperature
{
public double CurrentTemp { get; set; }
public DogTemperature(double dCurrentTemp)
{
_currentTemp = dCurrentTemp; //***this line***
}
}
答案 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; }