add
stfld float64 Complex::Im
ldloc.0
ret
}
.method public hidebysig value class Complex Minus(value class Complex OpNum1, value class Complex OpNum2)
{
.locals (value class Complex V0)
ldloca.s 0
initobj Complex
ldloca.s 0
ldarga.s 1
ldfld float64 Complex::Re
ldarga.s 2
ldfld float64 Complex::Re
sub
stfld float64 Complex::Re
ldloca.s 0
ldarga.s 1
ldfld float64 Complex::Im
ldarga.s 2
ldfld float64 Complex::Im
sub
stfld float64 Complex::Im
ldloc.0
ret
}
.method public hidebysig specialname void .ctor()
{
ldarg.0
call void [mscorlib]System.Object::.ctor()
ret
}
}
//DisplayComplex类,C++类,编译后变成了值类型,而且方法成员消失了。
.class private sequential sealed ansi DisplayComplex extends [mscorlib]System.ValueType
{
}
//RealMath类,C++类,编译后变成了值类型,而且方法成员消失了。
.class private sequential sealed ansi RealMath extends [mscorlib]System.ValueType
{
}
……
DisplayComplex类和RealMath类这两个C++类,方法成员为什么消失了?进一步检查的IL汇编语言程序,还可以看到下列IL汇编语言代码:
……
.module TypesSample1_CPP.exe
……
//DisplayComplex类的Display方法,注意这是一个全局方法(函数),但是仍然使用CIL代码实现。
.method assembly static void DisplayComplex.Display(modopt([mscorlib]System.Runtime.CompilerServices.IsConst) modopt([mscorlib]System.Runtime.CompilerServices.IsConst) value class DisplayComplex* C, value class Complex)
{
.locals (class System.String V0,
float64 V1,
float64 V2)
ldarga.s 1
ldfld float64 Complex::Re
stloc.2
ldloca.s 2
call class System.String [mscorlib]System.Double::ToString()
ldarga.s 1
ldfld float64 Complex::Im
stloc.1
ldloca.s 1
call class System.String [mscorlib]System.Double::ToString()
stloc.0
ldstr "+"
call class System.String [mscorlib]System.String::Concat(class System.String, class System.String)
ldloc.0
call class System.String [mscorlib]System.String::Concat(class System.String, class System.String)
ldstr "i"
call class System.String [mscorlib]System.Stri