tôi đã viết programm rất cơ bản này để kiểm tra những gì trình biên dịch đang làm đằng sau hậu trường:Không thể nhìn thấy cách trình biên dịch sử dụng các lớp anh tạo ra cho đóng cửa của tôi
class Program
{
static void Main(string[] args)
{
var increase = Increase();
Console.WriteLine(increase());
Console.WriteLine(increase());
Console.ReadLine();
}
static Func<int> Increase()
{
int counter = 0;
return() => counter++;
}
}
Bây giờ khi tôi nhìn vào mã với phản xạ tôi thấy rằng trình biên dịch tạo ra một lớp học cho việc đóng cửa của tôi như thế:
[CompilerGenerated]
private sealed class <>c__DisplayClass1
{
// Fields
public int counter;
// Methods
public int <Increase>b__0()
{
return this.counter++;
}
}
đó là tốt và tôi biết rằng anh ta cần phải làm điều đó để xử lý đóng cửa của tôi. Tuy nhiên, những gì tôi không thể thấy là làm thế nào anh ta thực sự đang sử dụng lớp này. Tôi có nghĩa là tôi sẽ có thể tìm thấy mã mà instantiates "<> c__DisplayClass1" một nơi nào đó, tôi có sai?
EDIT
Nếu tôi nhấp vào phương pháp tăng có vẻ như rằng:
private static Func<int> Increase()
{
int counter = 0;
return delegate {
return counter++;
};
}
bạn có thể đăng phần còn lại của mã được biên dịch không? Đặc biệt là phương pháp chính của bạn. – dowhilefor
@dowhilefor: Phương pháp chính thực sự sẽ khá nhàm chán. Nó chỉ gọi một phương thức để có được một đại biểu, gọi người đại diện một vài lần và in ra các kết quả, sau đó gọi 'Console.ReadLine'. –