C# では、varbile clsoer を使用する場所に宣言する必要があるかどうか疑問に思っていましたが、同じ質問が複数あります。しかし、まだ疑問があります!
このようなサンプルコードで試しました:
private void button1_Click(object sender, EventArgs e)
{
for(int i= 0; i<=1000; i++)
{
int myVariable = 12;
myVariable = i;
}
}
別の機会に、int myVariable = 12; のコード行を移動しました。forループの直前に。そして、これらは私が ILDASM で得たものです。previsouds の質問と回答は、C# が同じコードを作成したと言っていますが、実際にはそうではないことがわかります! それで、何が起こっているのですか?最後に、それは良い習慣ですか?- C# コンパイラを使用 -
内部変数:
.method private hidebysig instance void button1_Click(object sender,
class [mscorlib]System.EventArgs e) cil managed
{
// Code size 32 (0x20)
.maxstack 2
.locals init ([0] int32 i,
[1] int32 myVariable,
[2] bool CS$4$0000)
IL_0000: nop
IL_0001: ldc.i4.0
IL_0002: stloc.0
IL_0003: br.s IL_0010
IL_0005: nop
IL_0006: ldc.i4.s 12
IL_0008: stloc.1
IL_0009: ldloc.0
IL_000a: stloc.1
IL_000b: nop
IL_000c: ldloc.0
IL_000d: ldc.i4.1
IL_000e: add
IL_000f: stloc.0
IL_0010: ldloc.0
IL_0011: ldc.i4 0x3e8
IL_0016: cgt
IL_0018: ldc.i4.0
IL_0019: ceq
IL_001b: stloc.2
IL_001c: ldloc.2
IL_001d: brtrue.s IL_0005
IL_001f: ret
} /
/ メソッドの終わり Form1::button1_Click
for ループの外側の変数:
.method private hidebysig instance void button1_Click(object sender,
class [mscorlib]System.EventArgs e) cil managed
{
// Code size 32 (0x20)
.maxstack 2
.locals init ([0] int32 myVariable,
[1] int32 i,
[2] bool CS$4$0000)
IL_0000: nop
IL_0001: ldc.i4.s 12
IL_0003: stloc.0
IL_0004: ldc.i4.0
IL_0005: stloc.1
IL_0006: br.s IL_0010
IL_0008: nop
IL_0009: ldloc.1
IL_000a: stloc.0
IL_000b: nop
IL_000c: ldloc.1
IL_000d: ldc.i4.1
IL_000e: add
IL_000f: stloc.1
IL_0010: ldloc.1
IL_0011: ldc.i4 0x3e8
IL_0016: cgt
IL_0018: ldc.i4.0
IL_0019: ceq
IL_001b: stloc.2
IL_001c: ldloc.2
IL_001d: brtrue.s IL_0008
IL_001f: ret
} // end of method Form1::button1_Click