因为Point是struct,是值类型的。
属性编译后会以函数的形式存在程序中,所以你拿到的p2是个拷贝。使用方法:声明临时变量temp,修改temp,然后再赋值给p2.

解决方案 »

  1.   

    class MyClass
            {
                private Point p;
                public Point p2 { get this.value; set p2=p; }
            }
      

  2.   

    p2是个属性,它要通过get方法返回你要访问的Point对象,然后对这个对象做修改
                private Point _p;
                public Point P2
                {
                    get { return _p; }
                }
      

  3.   

    class MyClass
            {
                private Point p;
                public Point p2 { get {return p}; set {p=p2}; }
            }
    应该是这样的
      

  4.   

     MyClass m = new MyClass();
     m.p.Offset(1, 1);           //p{1,1}     
       
     m.p2 = new Point(0,1);  
     var tmp = m.p2;             //tmp{0,1}
     tmp.Offset(1, 2);           //tmp{1,3} m.p2.Offset(1, 2);          //p2{0,0} 这么奇怪的问题,其实是因为值类型和引用类型的区别。
      

  5.   

    m.p2其实等于var tmp = m.p2;
    因为point是指类型这里相当于给一个新的变量赋值,所以offset操作的是tmp。不是p2。
      

  6.   


     m.p2.Offset(1, 2);          //p2{0,0} 
    应为:
     m.p2.Offset(1, 2);          //p2{0,1}