Pre-C# 6
I’d use the last of these, for a trivial property. Note that I’d call this a public property as both the getters and setters are public.
Immutability is a bit of a pain with automatically implemented properties – you can’t write an auto-property which only has a getter; the closest you can come is:
public string Foo { get; private set; }
which isn’t really immutable… just immutable outside your class. So you may wish to use a real read-only property instead:
private readonly string foo;
public string Foo { get { return foo; } }
You definitely don’t want to write getName()
and setName()
. In some cases it makes sense to write Get/Set methods rather than using properties, particularly if they could be expensive and you wish to emphasize that. However, you’d want to follow the .NET naming convention of PascalCase for methods, and you wouldn’t want a trivial property like this to be implemented with normal methods anyway – a property is much more idiomatic here.
C# 6
Hooray, we finally have proper read-only automatically implemented properties:
// This can only be assigned to within the constructor
public string Foo { get; }
Likewise for read-only properties which do need to do some work, you can use member-bodied properties:
public double Area => height * width;