在set方法中为属性赋值
本文关键字:属性 赋值 set 方法 | 更新日期: 2023-09-27 18:13:13
下面的代码导致StackOverflow错误(如预期的那样)。但是,我希望能够在set方法中设置这个变量的值。有办法吗?
public bool IsAvailable
{
get
{
return IsAvailable;
}
set
{
if (value == true)
{
this.Shape.BrushColor = ColorAvailable;
IsAvailable = true;
}
else
{
this.Shape.BrushColor = ColorNotAvailable;
IsAvailable = false;
}
}
}
您需要使用一个后备字段:
private bool _isAvailable;
public bool IsAvailable
{
get
{
return _isAvailable;
}
set
{
if (value == true)
{
this.Shape.BrushColor = ColorAvailable;
_isAvailable = true;
}
else
{
this.Shape.BrushColor = ColorNotAvailable;
_isAvailable = false;
}
}
}
顺便说一句:代码可以大大缩短:
private bool _isAvailable;
public bool IsAvailable
{
get
{
return _isAvailable;
}
set
{
this.Shape.BrushColor = value ? ColorAvailable : ColorNotAvailable;
_isAvailable = value;
}
}
你的属性应该封装一个私有字段,并且应该在Setter中设置,而不是在属性中设置。
private bool _IsAvailable; //private field
public bool IsAvailable
{
get
{
return _IsAvailable;
}
set
{
if (value)
{
this.Shape.BrushColor = ColorAvailable;
}
else
{
this.Shape.BrushColor = ColorNotAvailable;
}
_IsAvailable = value;
}
}
你可以使用一个后备字段:
private bool _IsAvailable;
public bool IsAvailable
{
get
{
return _IsAvailable;
}
set
{
this.Shape.BrushColor = value ? ColorAvailable : ColorNotAvailable;
_IsAvailable = value;
}
}
自动与显式属性
您可以创建一个私有成员private bool _isAvailable
并将您的标志存储在那里。
public bool IsAvailable
{
get
{
return _isAvailable;
}
set
{
if (value)
{
this.Shape.BrushColor = ColorAvailable;
}
else
{
this.Shape.BrushColor = ColorNotAvailable;
}
_isAvailable = value;
}
}
您应该使用后备字段。但是,如果你不想使用后备字段,并确保this.Shape.BrushColor
不会在其他任何地方设置,你可以做一些(丑陋的)像:
public bool IsAvailable
{
get
{
return this.Shape.BrushColor == ColorAvailable;
}
set
{
this.Shape.BrushColor = value ? ColorAvailable : ColorNotAvailable;
}
}
本质上,IsAvailable属性不是一个底层(后备)字段,如;
private bool _isAvailable;
我还会考虑减少冗长,例如,'(value == true)'与'if (value)'相同,并设置if (value)之外的底层字段的值…Else且只在一行上。这样,上面的代码就可以简化为;
set
{
this.Shape.BrushColor = value?ColorAvailable:ColorNotAvailable;
_isAvailable = false;
}