2013-03-14 37 views
9

Tôi cũng đang trải qua chủ đề 'Biểu thức Lambda' (Chương 17; Đại biểu, C# Đường thực tế cho đại biểu). Jeffery nói rằng biên dịch C# tạo ra một lớp không tĩnh mới trong nền mà có những điều sau đây:Biểu thức Lambda: Hành vi biên dịch

  1. Fields để lưu trữ tất cả các biến địa phương đã được truy cập trong biểu thức Lambda.
  2. Phương pháp có thân chứa Biểu thức Lambda và loại chữ ký/trả về khớp với đại biểu mà Lambda Expressin đã được sử dụng.

Tôi có hai câu hỏi sau:

  1. tôi đã làm một chút gỡ lỗi bản thân mình và thấy rằng nếu các biểu thức Lambda thay đổi giá trị của một biến địa phương (được định nghĩa trong một phương thức lambda Expresison đang được được sử dụng trong), giá trị mới được phản ánh bên ngoài phần thân biểu thức. Làm thế nào là điều này có thể xem xét các biểu hiện thực sự là trong một lớp học khác nhau?

  2. Tại sao lớp cần phát ra là không tĩnh khi tương tự có thể được thực hiện bởi lớp tĩnh một cách hoàn hảo?

Tôi hy vọng đây không phải là một khái niệm rất đơn giản mà tôi không thể hiểu được.

Hãy cho tôi biết nếu tôi cần cung cấp thêm chi tiết.

Trả lời

5

Trước hết tôi có một câu hỏi tương tự, cách đây vài ngày.

Closure captured variable modifies the original as well

Thứ hai, điểm tạo nên lớp tĩnh là gì? Chỉ có một đối tượng được tạo ra, và đối tượng đó không phải sống trong suốt thời gian ứng dụng.

the new value is reflected outside the expression body too. How is this possible considering the expression is actually in a different class.

Cái này là cùng một đối tượng đang được tham chiếu cả theo phương pháp Anonymus, cũng như các biến cục bộ bên ngoài phương pháp Anonymus, vì vậy nó không quan trọng từ nơi bạn thay đổi nó, bạn thay đổi điều tương tự. Ngoài ra, câu trả lời được cung cấp bởi Tim Goodman trong câu hỏi tôi liên kết, cho bạn biết phải làm gì, để tránh những thay đổi được phản ánh ở khắp mọi nơi, bằng cách tạo một đối tượng mới bên trong phương thức ẩn danh của bạn.

+0

Câu trả lời hay. Cảm ơn. – astraldust

+0

Bạn được chào đón, cổ vũ. – Freeman

Các vấn đề liên quan