我是C#中的新成員。我遇到過這樣的代碼,例如:在每次調用中重新使用存活的局部變量。 UB?
namespace App1
{
delegate int Sum(int number);
class TestAnonymusMethod
{
static Sum m()
{
int result = 0; // is not zeroed between calls
Sum del = delegate (int number)
{
for (int i = 0; i <= number; i++)
result += i;
return result;
};
return del;
}
static void Main()
{
Sum del1 = m();
for (int i = 1; i <= 5; i++)
Console.WriteLine("Sum of {0} == {1}", i, del1(i));
Console.ReadKey();
}
}
}
輸出是:
Sum of 1 == 1
Sum of 2 == 4
Sum of 3 == 10
Sum of 4 == 20
Sum of 5 == 35
正如你看到的,局部變量result
電話之間不歸零。它是「未定義的行爲」嗎?看起來好像是因爲result
的範圍關閉時發生的,它的生命期是不確定的。
但是在C#中重用活着實體的規則是什麼?這是否是規則 - 「總是重複使用」,或者有些情況下,當創建新的而不是重複使用舊的舊的時候?
爲什麼它應該歸零?你只需調用一次「m()」方法,所以它只被初始化爲0一次。 – Evk
@Evk,我已經改名爲問題。由於'result'不是'static',它對我來說看起來很奇怪(在C++之後) - 在每次調用中重複使用相同的變量(使用它的當前值)。 – user1234567