IMO Dart has the best implementation of properties, which you can start out as normal fields, e.g:
class Rectangle {
num left, top, width, height, right bottom;
}
and can access like normal:
var height = rect.bottom - rect.top;
But can later be changed into a computed property without affecting the above callsites, e.g:
class Rectangle {
num left, top, width, height;
num get right => left + width;
set right(num value) => left = value - width;
num get bottom => top + height;
set bottom(num value) => top = value - height;
}
C# is a close 2nd, but it's not binary (or reflection) compatible to change from a field to a property for call-sites (i.e. it's only source-compatible).