IL_0000: nop
IL_0001: newobj instance void B::.ctor()
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: callvirt instance void A::DoSmth()
IL_000d: nop
reflection
, можете начать с этого https://docs.microsoft.com/ru-ru/dotnet/api/system... String
хитрый тип, до недавнего времени его нельзя была задать в роли константы, т.к. он действительно ссылочный тип. Ещё по-умолчанию он интернированный, т.е все одинаковые тексты ссылаются на одним объект. Текст нельзя поменять, можно только создать новый объект с новым текстом.