Why D doesn't have an equivalent to C#'s readonly?

Gary Willoughby via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Jun 29 14:20:51 PDT 2015


On Monday, 29 June 2015 at 20:12:12 UTC, Assembly wrote:
> I believe it's a design choice, if so, could someone explain 
> why? is immutable better than C#'s readonly so that the 
> readonly keyword isn't even needed? for example, I'd like to 
> declare a member as readonly but I can't do it directly because 
> immutable create a new type (since it's a type specific, 
> correct?) isn't really the same thing.
>
> MyClass x = new MyClass();
>
> if I do
>
> auto x = new immutable(MyClass)();
>
> give errors

There are a few ways you can enforce a field to be readonly.

You can use properties:

import std.stdio;

class Foo
{
	private int _bar;
	
	this(int bar)
	{
		this._bar = bar;
	}

	public @property int bar()
	{
		return this._bar;
	}
}

void main(string[] args)
{
	auto foo = new Foo(1337);

	writefln("%s", foo.bar);

	// Error:
	// foo.bar = 10;
}

or a manifest constant:

import std.stdio;

class Foo
{
	public enum int bar = 1337;
}

void main(string[] args)
{
	auto foo = new Foo();

	writefln("%s", foo.bar);

	// Error:
	// foo.bar = 10;
}


More information about the Digitalmars-d-learn mailing list