Nie, nie ma czegoś takiego w języku C#. Wszystkie stany, które chcesz utrwalić w wielu wywołaniach metod, muszą znajdować się w polach, instancji lub statycznych.
Z wyjątkiem ... jeśli przechwycisz zmienną w wyrażeniu lambda lub coś w tym stylu. Na przykład:
public Func<int> GetCounter()
{
int count = 0;
return() => count++;
}
Teraz można użyć:
Func<int> counter = GetCounter();
Console.WriteLine(counter()); // Prints 0
Console.WriteLine(counter()); // Prints 1
Console.WriteLine(counter()); // Prints 2
Console.WriteLine(counter()); // Prints 3
Teraz oczywiście jesteś tylko nazywając GetCounter()
raz, ale że „zmienna lokalna” jest z pewnością żyje na znacznie poza życiu mogłeś oczekiwano ...
To może, ale nie musi być dla ciebie przydatne - to zależy od tego, co robisz. Ale większość czasu ma sens, gdy obiekt ma swój stan w normalnych polach.
C został wynaleziony podczas wątków jeszcze nie istnieje. Podobnie jak Visual Basic, musieli go zaimplementować w vb.net. Ilość kodu, który musi wygenerować, aby była bezpieczna dla wątków i wyjątków, jest całkiem spora. –
Bardzo dobre pytanie –