On Wednesday, 30 January 2013 at 02:15:09 UTC, Rob T wrote:
Even with @property restrictions, I still don't think it will
work as expected. For example, if the variable is a struct,
then you have to disallow operations on the struct from outside.
Example:
struct Y { int a; }
struct X{ @property Y y; }
X x;
x.y.a = 4; // <- this has to be illegal!
Reason?
struct X{
Y _y;
@property Y y{ return _y; }
}
// this won't change _y as it did before.
x.y.a = 4;
Somehow I had missed this post. So, we can bury the idea of
restricting the access to a public member variable by making it
illegal to take the address of it. And as long as it is possible
to take the address of a public member variable, it is possible
for the end-user to by-pass all encapsulation that you might
later on add over that public member variable. For this reason,
my logic says, it is impossible to invent such an implementation
of property concept that would make it possible to first put in a
public member variable and later on encapsulate it *without*
changing the interface.