C#では、他のステートメントに添付されていないメソッド内でブロックを作成することができます。C#で匿名の非結合ブロックの値は何ですか?
public void TestMethod()
{
{
string x = "test";
string y = x;
{
int z = 42;
int zz = z;
}
}
}
このコードは、メインメソッド内のカッコが存在しないかのようにコンパイルされて実行されます。ブロック内のブロックにも注意してください。
これが貴重なシナリオはありますか?私はまだ何も発見していないが、他の人々の知見を聞いて興味がある。
これは実際にVMレベルで確認しましたか?最も合理的なコンパイラとGCは、コンパイルプロセス中に2つのブロックを1つにまとめる傾向があり、それを参照する変数を最後に使用した後にGCに値を渡すことができます。 – emk
私はガベージコレクションを検証していませんが、範囲を確認しました。私はかなり.NETのガーベジコレクターが範囲を残したものを収集する/参照されていないと確信しています。 –
GCが起動する可能性がありますが、それはしばらくお待ちください!範囲の喪失は自動GCを意味しません。また、この場合、値型の場合、GCには何もありませんでした。 GCではなくスコープが主な目的です。 –