代码之家  ›  专栏  ›  技术社区  ›  Øyvind Bråthen

修改变量和属性的区别

  •  8
  • Øyvind Bråthen  · 技术社区  · 15 年前

    这可能有一个很合理的解释,但我有一个问题。

    假设我有一个名为矩形的变量。我现在可以说,x=50;没有任何问题。

    现在我有了一个名为rect的属性的类,它公开了内部变量rect。

    那么,如果我试着写 Rect.X = 50; 我得到以下编译错误:

    无法修改“testclass.rect”的返回值,因为它不是变量。

    我会写 Rect = new Rectangle( 50, Rect.Y, Rect.Width, Rect.Height) 与不可变类型类似,但对于不可变类型,是否有其他方法可以做到这一点?

    我想为这个矩形字段使用自动属性,但是如果不能在类内部修改它,那真的很烦人。

    有没有什么方法可以使一个支持字段和放弃汽车属性?

    4 回复  |  直到 12 年前
        1
  •  10
  •   Darin Dimitrov    15 年前

    这个错误的原因是 Rectangle 是与引用类型(类)不同的值类型(结构)。您不能修改 X 属性,因为当使用 Rect 属性getter返回矩形的新值(getter是一个函数)。如果它是一个引用类型,那么您就可以操作指针。

    这是需要注意的值与引用类型的一个重要方面。

        2
  •  1
  •   Henrik    15 年前

    访问属性实际上是一个函数调用,它返回值类型的副本。rect.x=50;只修改这个临时副本,而不修改备份字段本身。

    如果属性不是自动实现的,则可以创建一个附加的属性rectx,该属性可用于获取和设置矩形的x属性。

        3
  •  0
  •   Sidharth Panwar    15 年前
        4
  •  0
  •   nawfal Donny V.    12 年前
      class RectangleWithoutFields 
      {
         // just autoproperties, no fields
    
         public int X { get; set; }
    
         public int Y { get; set;}
    
    
         public RectangleWithoutFields()
         {
             X = 0;
    
             Y = 0; 
         }
    
         public void ChangeProperties(int x, int y)
    
         {
             X = x;
    
             Y = y;
         }
     }
    
    推荐文章