Tutorial :Expose class attributes with accessor



Question:

I don't know the correct technical terms to describe my question, so I'll give an example:

    private Point _PrivateVect = new Point();      public Point Publicvect      {          get          {              return _PrivateVect;          }          set          {              _PrivateVect = value;          }      }  

The problem is that if I wanted to access Publicvect.X I get the error Cannot modify the return value of 'Publicvect' because it is not a variable. Is there a way around this? Or do I just need to do Publicvect = new Point(NewX, Publicvect.Y); forever?


Solution:1

Yet another reason that mutable structs are evil. One workaround is to expose the dimensions as accessors for convenience:

public Point PublicX {      get {return _PrivateVect.X;}      set {_PrivateVect.X = value;}  }  public Point PublicY {      get {return _PrivateVect.Y;}      set {_PrivateVect.Y = value;}  }  

But other that this; yes you would need to do the new Point(x,y) each time, since Point is a struct. When you access it via a property you get a copy of it, so if you mutate the copy and then discard the copy, you simply lose the change.


Solution:2

The problem you have here is that the Point type is a Value Type. So when you manipulate Pointvect.X you are really manipulating a temporary copy of the value type, which of course has no effect on the original instance.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »