Le 13/12/2011 01:25, Mehrdad a écrit : > In every language I've seen that has "properties" (C#, Python), they are: > > - _Defined_ like methods > - _Used_ like variables > > The trouble is, this isn't true with D. > > Consider: > > struct Struct > { > int delegate() randgen1 = ...; > @property > int delegate() randgen2() { ... } > } > > Struct s; > auto result = s.randgen2(); // This doesn't do the user expects > > It is *not* possible, in D, to transparently use either one -- you have > to treat properties, like methods, not like variables. Except that this > is inconsistent -- in most other cases, you don't need to do that. > > Or for example: > > Struct s; > auto a = &s.randgen1; > auto b = &s.randgen2; // Should be an error > > IMO, properties should not be callable with parentheses at all. > Something like C# -- they should generate getter and setter methods > instead, or the like. > Furthermore, taking the address of a property should only work if you > can take the address of its _value_. If you need the address of the > actual function, then I think a corresponding getter method might be > easier to use. > > It gets even /worse/ in templated code, because you have no idea whether > an alias is referring to a property or to a variable or whatever. > > Making this change would obviously break code, but the break is > obviously _trivial_ to fix: just remove extra parentheses. It won't > exactly be the kind of breakage that causes headaches. > > So should this be fixed?
My question is: what is the use case for properties in D ?