On 2012-06-14 14:47, Roman D. Boiko wrote:

I was thinking that casting is bad here, but wanted to give the user
ability to pass any object inside constructor. Now I see that this is a
bad idea given transitivity of immutable.

If you want that and have it immutable you need to make a deep copy of the passed in object to be safe. You could use const instead and also making the argument const. If an argument is const you can pass both mutable and immutable values, and const of course.

In .NET readonly applies only to fields inside objects preventing
assignments to them from other places than constructors. But I can
assign another instance of an object with readonly fields to the same
variable. Then I can pass that instance to some constructor and assign
it to a readonly field.

You should be able to use const.

How to achieve the same in D? As far as I understand, it is not possible
for structs with immutable fields, and it is not clear for me about
classes.

In other words:

Does a variable always point to the same place in memory and assigning
to it simply copies data to that place? I don't understand whether it is
possible to make it point to another place. That would be a mutable
variable pointing to a type with immutable fields.

That's only possible with pointers in D.

After that I want to
assign an instance of that type to an immutable field in constructor.
Can I do so, or that would be bad?

--
/Jacob Carlborg

Reply via email to