C#中使用了属性这种技术,从我浅薄的技术能力来看,是看不出这种技术有什么好处的,反而会在一些意想不到的情况埋下深坑,一不小心就把自己埋了。这篇博客就是用来记录C#属性中的深坑
(一):属性是什么
C#中定义类的时候可能会出现函数,属性一般会以如下形式出现,
public static double theta
{
get ;
set ;
}
或者是这样
public static double theta
{
get { return _theta; }
set { _theta = value; }
}
但是应该说,这两种形式虽然让我觉得有点多余,但是其实还好,最麻烦的其实是下面这种
public static double theta
{
get { return _theta; }
set
{
if(_theta>PI/2)
_theta = PI / 2;
else
_theta = value;
}
}
(二):bug复现
我当初出的bug很简单,就一句
Example.theta=PI;
就是因为太简单,简单到我都想不到这里会有bug,所以当时出bug之后让我困惑了很久。
(三):bug原理
这种语句麻烦的地方在于,赋值或者取值的时候会有判断,这种情况下得到的值很可能不是我们想要的,最麻烦的一点是,get,set块里的语句,调试的时候是不会进去的。所以我明明是个简单的赋值语句,结果得到的不是想要的值