Tôi đã reading this article about closures trong đó họ nói:Điều gì là đặc biệt về đóng cửa?
- "tất cả các đường ống dẫn nước là tự động"
- trình biên dịch "tạo ra một lớp wrapper" và "kéo dài tuổi thọ của các biến"
- "bạn có thể sử dụng các biến địa phương mà không lo lắng"
- trình biên dịch NET sẽ chăm sóc của các đường ống dẫn nước cho bạn, vv
vì vậy, tôi đưa ra một ví dụ dựa trên mã nguồn của họ và đối với tôi, nó có vẻ như mặc dù đóng cửa chỉ hoạt động tương tự như các phương thức được đặt tên thông thường mà còn "quản lý các biến cục bộ mà không cần lo lắng" và trong đó "tất cả các hệ thống ống nước là tự động".
Hoặc "vấn đề biến cục bộ" đã giải quyết vấn đề gì khiến cho việc đóng cửa trở nên đặc biệt/thú vị/hữu ích?
using System;
namespace TestingLambda2872
{
class Program
{
static void Main(string[] args)
{
Func<int, int> AddToIt = AddToItClosure();
Console.WriteLine("the result is {0}", AddToIt(3)); //returns 30
Console.ReadLine();
}
public static Func<int, int> AddToItClosure()
{
int a = 27;
Func<int, int> func = s => s + a;
return func;
}
}
}
trả lời
Vì vậy, câu trả lời cho cái này là để đọc Jon Skeet's article on closures rằng Marc chỉ ra. Bài viết này không chỉ cho thấy sự tiến hóa dẫn đến các biểu thức lambda trong C# mà còn cho thấy cách các bao đóng được xử lý trong Java, một đọc tuyệt vời cho chủ đề này.
Các ngôn ngữ khác (chẳng hạn như Javascript) hỗ trợ đóng cửa. Bạn đang hỏi về khái niệm hoặc thực hiện cụ thể của C#? – strager
Tôi nghĩ rằng ví dụ quá đơn giản để hiểu được sức mạnh của việc đóng cửa. –
@strager: Tôi có nghĩa là khái niệm nói chung, tôi đang cố gắng để có được đầu của tôi xung quanh các đại biểu, đóng cửa, bản đồ, lambdas, "biểu thức lambda", "cây lambda", chức năng ẩn danh, tách lạng bộ, vv và nói chung mới mô hình lập trình chức năng dường như mở rộng ra ngoài bất kỳ ngôn ngữ nào, có gốc rễ trong toán học, v.v. (Tôi đã đặt C# trong tiêu đề vì Stackoverflow giờ cho bạn biết rằng tiêu đề của bạn là "không đủ tốt, thêm từ duy nhất" ...) –