Добавьте следующее в вашу Account
XSD-схему, чтобы правильно добавить Shares
:
Подробные сведения и примеры последовательностей XSD см. На этой странице W3C . [ 115]
Это предварительно вычислит любые константные выражения, когда это скомпилирует, включая конкатенацию строк. Без const
это будет оставлено в покое.
Ваш первый пример компилирует в этот IL:
.maxstack 2
.locals init ([0] int32, [1] int32)
ldc.i4.1 //load 1
stloc.0 //store in 1st local variable
ldc.i4.5 //load 5
ldloc.0 //load 1st variable
mul // 1 * 5
stloc.1 // store in 2nd local variable
Второй пример компилирует в это:
.maxstack 1
.locals init ( [0] int32 )
ldc.i4.5 //load 5
stloc.0 //store in local variable
Смотря на код, сгенерированный моно компилятором, версией с неконстантой выполнение умножения во время выполнения. Таким образом, умножение не оптимизировано. Если Вы делаете константу, то умножение оптимизировано.
Компилятор Microsoft мог бы иметь более агрессивный компилятор, лучшее решение состоит в том, чтобы посмотреть на код, сгенерированный компилятором для наблюдения то, что это делает.
Что оптимизировал бы компилятор, вот не умножения 1 серовато-синим, а скорее арифметика со значениями, известными во время компиляции. Так да компилятор оптимизировал бы всю математику в Вашем примере, с или без const
.
Править: Компетентный компилятор, должен сказать я.
Постоянное распространение является одной из наиболее распространенных и самых легких оптимизаций.