|
|
|
|
|
by andygocke
338 days ago
|
|
There are two types of initializers: internal and external. Internal are inside the type, like field and property initializers. External are outside, like object initializers, collection initializers, and ‘with’ clauses. Internal initializers are run as part of the constructor, before any user code. External initializers are run after the constructor, on the constructed object. For instance: class C
{
public int P = 5;
}
var c = new C { P = 3 };
`c.P` has the value 3.In your example: var n2 = n1.<Clone>$();
n2.Value = 3; // 'with' field setters
n2.<OnPostCloneInitialise>(); // run the initialisers
The “PostCloneInitializers” you’re running are the field initializers, so the order is backwards. You’re overwriting the value of the external initializers with the internal initializers. |
|