無論我們何時轉換一個變量,例如把一個數字值轉換為一個字符 值,在內部,程序僅調用了帶有轉換數據類型的函數。轉換不能修改原始的變量。實際發生的是,在 WriteLine被調用時帶有一個wchar,而不是一個int。從而,轉換不會導致任何運行期間的負載。
a.cs
class zzz
{
public static void Main()
{
char i = 'a';
System.Console.WriteLine((char)i);
}
}
a.il
.assembly mukhi {}
.class private auto ansi zzz extends [mscorlib]System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
.locals (wchar V_0)
ldc.i4.s 97
stloc.0
ldloc.0
call void [mscorlib]System.Console::WriteLine(wchar)
ret
}
}
Output
a
C#的字符數據類型是16字節大小。在轉換為IL時,它會被轉換為 wchar。字符a會被轉換為ASCII數字97。這個字符會被放在棧上並且變量V_0會被初始化為這個值。之後, 程序會在屏幕上顯示值a。
a.cs
class zzz
{
public static void Main()
{
System.Console.WriteLine('"u0041');
System.Console.WriteLine(0x41);
}
}
a.il
.assembly mukhi {}
.class private auto ansi zzz extends [mscorlib]System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
ldc.i4.s 65
call void [mscorlib]System.Console::WriteLine(wchar)
ldc.i4.s 65
call void [mscorlib]System.Console::WriteLine(int32)
ret
ret
}
}
Output
A
65