On Sat, 26 Jan 2013 11:10:20 -0800, Maxim Fomin <[email protected]> wrote:

On Saturday, 26 January 2013 at 13:21:37 UTC, Jacob Carlborg wrote:
It's always possible to avoid keywords in favor of syntax. Example:

Declaring a getter:

int foo {}

Just as a regular function declaration but without the parentheses.

Declaring a setter:

void foo= (int value) {}

Append an equal sign to the function name.

This looks nice, but I favor for C# properties.

The root of the issue is that in C/C++/D there is tremendous difference between object types and functions types (which are incompatible) and property is like a bridge between them - I think that is why the feature is demanded.

However in D a property is essentially a function. Few characteristics that are intrinsic to data types are typeof(prop) which is data type for properties and parenthesis-less access. There is no property as a special entity per se.

In C# property and getter/setter are separated, so there is no confusion between data and functions. In D it would look like this:

class A
{
     private int i;
     @property int foo // may be without @property at all?
     {
         get { return i; }
         set { i = @value; }
     }
}

In this solution property is not defined by naming of two separate functions and is independent of any function in general.

C# does not have a property keyword precisely because get/set are enough for the compiler to determine whether or not it is a property.

So this is completely valid C#:

class A
{
     private int i;
     public int foo
     {
         get { return i; }
         set { i = @value; }
     }
 }

--
Adam Wilson
IRC: LightBender
Project Coordinator
The Horizon Project
http://www.thehorizonproject.org/

Reply via email to