c# - How do dynamic and value types work? -



c# - How do dynamic and value types work? -

there little piece of code can not understand:

class programme { static void main(string[] args) { var ts = new teststruct() { = 2 }; object ots = ts; dynamic dts = ots; ts.a = 6; dts.a = 4; console.writeline(dts.gettype()); //type teststruct console.writeline("ts.a =" + ts.a); //6 console.writeline("unboxed ts.a =" + ((teststruct)ots).a); //4 console.writeline("dts.a =" + dts.a); //4 console.readkey(); } } public struct teststruct { public int a; }

dts , ots refer same variable on heap, gettype returns dts teststruct. dts teststruct stored on heap? or not understand?

tl;dr:

dts , ots point same, boxed, re-create of ts. ts contains original teststruct separately.

as may know, boxing , unboxing works this:

a key difference same operations on class types boxing , unboxing copies struct value either or out of boxed instance. thus, next boxing or unboxing operation, changes made unboxed struct not reflected in boxed struct.

so in line:

object ots = ts;

you making re-create of struct, , becomes reference type. have 2 instances of teststruct. on, original ts, , sec one, copy, reference type (boxed teststruct). hence, after line:

dynamic dts = ots;

the boxed re-create of ts pointed 2 references: ots , dts. fact dts dynamic irrelevant here. dynamic does, deferring type checking until run time, , after this, behaves object:

the compiler packages info operation, , info later used evaluate operation @ run time. part of process, variables of type dynamic compiled variables of type object. therefore, type dynamic exists @ compile time, not @ run time.

you can observe happening when going step step through code in debugger , inspecting values of ts.gethashcode(), ots.gethashcode() , dts.gethashcode(). actual copying may take place not after modify struct.

c# .net

Comments

Popular posts from this blog

formatting - SAS SQL Datepart function returning odd values -

c++ - Apple Mach-O Linker Error(Duplicate Symbols For Architecture armv7) -

php - Yii 2: Unable to find a class into the extension 'yii2-admin' -