I’m wondering how you’d recommend designing a class, given the fact that XNA Framework uses Struct all over the place?
For example, a spite class, which may require a Vector2 and a Rectangle (both defined as Struct) to be accessed outside of the class.
The issue come in when you try to write code like this:
class Item
{
public Vector2 Position {get; set;}
public Item() { Position = new Vector2(5,5); }
}
Item i = new Item();
i.Positon.X = 20; // fails with error 'Cannot modify the return value of Item because it is not a variable.'
// you must write code like this
var pos = i.Position;
pos.X++;
i.Position = pos;
The second option compiles and works, but it is just butt ugly. Is there a better way?
Or, just to throw this out there … just expose the field. There’s nothing inherently wrong with exposing a public field.
For example, if your entity exposes a Vector3 for it’s position so that other things can use that value in their own calculations … just expose it. Otherwise, if no other class or entity needs to know the position, do not expose it at all 🙂
Here is some sage advice from Rico Mariani: