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