修改变量和属性之间的区别

时间:2010-09-20 07:15:32

标签: c# .net

对此可能有一个非常合乎逻辑的解释,但我有一个问题。

假设我有一个名为_rect的Rectangle类型的变量。我现在可以说_rect.X = 50;没有任何问题。

现在我有一个带有一个名为Rect的属性的类,它暴露了内部变量_rect。

然后,如果我尝试编写Rect.X = 50;,我会收到以下编译错误:

无法修改'TestClass.Rect'的返回值,因为它不是变量。

我可以编写Rect = new Rectangle( 50, Rect.Y, Rect.Width, Rect.Height)类似于不可变类型,但对于非不可变类型,还有其他方法吗?

我想对这个矩形字段使用自动属性,但是真的很烦人,无法在类本身内部修改它。

是否有任何方法没有制作支持字段并放弃自动属性?

4 个答案:

答案 0 :(得分:10)

此错误的原因是因为Rectangle是值类型(struct),与引用类型(类)相反。您无法修改X属性,因为当您使用Rect属性getter时,将返回矩形的新值(getter是一个函数)。如果它是一个引用类型,你正在操纵指针,这是可能的。

这是值与参考类型有关的重要方面。

答案 1 :(得分:1)

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

当属性未自动实现时,您可以创建一个附加属性RectX,可用于获取和设置矩形的X属性。

答案 2 :(得分:0)

答案 3 :(得分:0)

  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;
     }
 }