Properties: a.b.c = 3

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Wed Jul 29 00:39:23 PDT 2009


Kagamin wrote:
> Walter Bright Wrote:
> 
>> The issue is what if b is a property, returns a temporary object, and 
>> that temp's .c field is uselessly set to 3?
>>
>> It's a classic problem with properties that are implemented as functions.
> 
> Does this problem pertain to properties?
> Look at this:
> 
> void main()
> {
>   int a=3;
> }
> 
> Is "a" assigned usefully or uselessly? And what compiler says about it? And how did you determine that your example is useless? Did you check for destructors, invariants, copy constructors?

The code above is only loosely related. The code above contains a 
definition initiated by the user. The code a.b.c = 4 expresses the 
intent of a user to effect a change a field that can be accessed later 
through a.b.c, whereas with properties the code will in all likelihood 
not do that.

> And do your question imply that functions are allowed to return temporaries while properties aren't?

The question is very simple: given that we're used with a specific 
semantics for a.b.c = 3, how can we address the fact that the semantics 
of this familiar operation is so different (and likely so useless) when 
properties replace fields?

> And what's the difference if c is field or property?

It's b that's the problem.


Andrei



More information about the Digitalmars-d mailing list