Nói rằng tôi có một phương pháp C# nhưCách luồng có thể truy cập biến cục bộ ngay cả sau khi phương thức đã kết thúc?
public void MyMethod()
{
int i = 0;
var thread = new Thread(() =>
{
Thread.Sleep(100);
if (i == 0)
{
Console.WriteLine("Value not changed and is {0}", i);
}
else
{
Console.WriteLine(" Value changed to {0}.", i);
}
});
thread.Start();
i = 1;
}
Ở đây phương pháp này tạo ra một thread mà truy cập vào biến cục bộ được tạo trong phương pháp. Vào thời điểm nó truy cập biến này, phương thức đã hoàn thành và do đó một biến cục bộ tôi không nên tồn tại. Nhưng mã chạy mà không gặp bất kỳ sự cố nào. Theo sự hiểu biết của tôi biến địa phương không tồn tại sau khi khối phương pháp kết thúc. Tôi không thể có được điều này.
Thuật ngữ nào bạn sẽ sử dụng để mô tả loại thực thể được sử dụng trong IL để giữ các biến không được nâng lên các trường lớp? Một cái gì đó được viết như một biến nhưng được giữ trong một lớp trình biên dịch là, từ một quan điểm thực hiện, một trường lớp. – supercat
@supercat: Tôi gọi nó là biến cục bộ. Nhưng tôi sẽ nói về ngôn ngữ * MSIL * sau đó, không phải về ngôn ngữ C#. –
Hết sức tò mò, bạn có biết liệu những người tạo C# có được coi là yêu cầu các biến được sử dụng trong một đóng được khai báo một cách khai báo không? Tôi nhận ra rằng các bao đóng có thể hữu ích, nhưng việc ngầm định các biến vào các bao đóng có vẻ nguy hiểm và đôi khi có thể mang lại ngữ nghĩa không rõ ràng. Việc khai báo rõ ràng các bao đóng sẽ làm cho ngữ nghĩa rõ ràng hơn. – supercat