Properties in C# and prop_Foo

Steven Schveighoffer schveiguy at yahoo.com
Mon Aug 10 07:47:58 PDT 2009


On Sun, 09 Aug 2009 15:53:23 -0400, Bill Baxter <wbaxter at gmail.com> wrote:

> On Sun, Aug 9, 2009 at 11:25 AM, grauzone<none at 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



More information about the Digitalmars-d mailing list