getters, setters, and factories allow the implementation to evolve without breaking client code.
foo.bar = x; // could be normal assignment or a setter.1) different naming convention between members and props
2) dont expose members; use properties from the start for anything public
to assist with two, they introduce the default get/set implementation, like so:
public object Derp { get; set; }
for when you want to expose an interface with the assignment idiom but dont actually have any interesting implementation