[英]Accessing the private field of an auto-implemented property
在下面,当我尝试使用_currentTemp
变量(该变量应该通过自动属性功能自动生成)时,出现一条未找到变量消息:
名称
_currentTemp
在当前上下文中不存在。
使用{ get; set; }
{ get; set; }
{ get; set; }
应该自动创建此私有变量( _currentTemp
),对吗?
public class DogTemperature
{
public double CurrentTemp { get; set; }
public DogTemperature(double dCurrentTemp)
{
_currentTemp = dCurrentTemp; //***this line***
}
}
由自动属性创建的后备字段在源代码中不可与您交互,因为它是由编译器生成的。
如果要与支持字段进行交互,则需要以冗长的方式创建属性。
基于@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
属性中使用的用法-即在View中显示并更新它; 您可能需要阅读实现INotifyPropertyChanged
。 这是链接: https : //msdn.microsoft.com/zh-cn/library/ms229614(v=vs.100).aspx
如果它只是一个普通的旧属性,并且没有用于任何特殊的东西(例如在模型中); 然后
public double DogTemperature { get; set; }
财产就足够了; 在上面的构造函数中进行设置。
希望这可以帮助!
在我看来,如果您只想存储一个值,则定义这样的属性是毫无意义的。
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类的构造函数设置属性的值,则应将设置器设为私有。 这将仅允许该属性公开阅读。
public double CurrentTemp { get; private set; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.