On Sun, 09 Aug 2009 15:53:23 -0400, Bill Baxter <wbax...@gmail.com> wrote:
On Sun, Aug 9, 2009 at 11:25 AM, grauzone<n...@example.net> wrote:
Bill Baxter wrote:
Interesting thing I found out about C# properties.
The syntax
int Thing {
get { return _thing; }
set { _thing = value; }
}
is rewritten by the C# compiler into
int prop_Thing() { return _thing; }
void prop_Thing(int value) { _thing = value; }
Just thought it was interesting given all our discussions,
particularly that the syntax C# translates into is exactly what Andrei
was proposing we use for D's syntax. And I think I even said that was
fine, but let's have a different syntax for declaring that the D
compiler translates into those prop_Thing methods. Well, it turns out
that's exactly what C# does.
C# doesn't allow you to directly call the accessors (which are named
set_Thing and get_Thing, btw.). It also creates and associates metadata
with
the property (so that you know that "Thing" is supposed to be a property
with these setters and getters).
In C# (as in the language) properties still work as cast into concrete;
it's
just that on the lowest level, it is mapped to normal methods + extra
metadata.
I see. I thought you could call get_Thing, set_Thing directly.
It used to be in C++.NET (at least the .NET 1.0 version) you HAD to
call/define properties that way ;) I think they've since added syntax to
C++.Net to have more friendly property access. I'm not sure if you can
still call the get_/set_ versions, but knowing Microsoft's propensity for
backwards compatibility, you probably can...
I too thought you could call the get_Thing and set_Thing directly from C#,
though I've never found a need to. One possible reason is to pass it as a
delegate.
-Steve