C#:属性中出现的坑

        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块里的语句,调试的时候是不会进去的。所以我明明是个简单的赋值语句,结果得到的不是想要的值

你可能感兴趣的:(C#)