2009-03-26 22 views
5

Sự khác nhau cơ bản giữa Java và C# trong điều khoản của các lớp bên trong/địa phương/ẩn danh là gì?Sự khác nhau cơ bản giữa Java và C# về các lớp bên trong/địa phương/ẩn danh là gì?

+0

Bản sao của http://stackoverflow.com/questions/521305/why-should-i-learn-c http://stackoverflow.com/questions/325046/java-or-net và nhiều người khác – Welbog

+0

Nó không phải là một dupe - nhìn vào tiêu đề. Nó hỏi về sự khác biệt cụ thể. Tôi sẽ chỉnh sửa câu hỏi để làm rõ hơn. –

+0

Tôi hầu như không nghĩ rằng điều này đủ điều kiện là "trùng lặp chính xác". –

Trả lời

8

C# không có tương đương với các lớp bên trong Java - nó chỉ có các kiểu lồng nhau (như các lớp lồng nhau "tĩnh" của Java).

Quy tắc truy cập hơi khác nhau - trong Java, lớp bên ngoài có quyền truy cập vào các thành viên riêng của lớp lồng nhau và ngược lại. Trong C# lớp lồng nhau có quyền truy cập vào các thành viên riêng của lớp bên ngoài, nhưng không phải là theo cách khác.

C# không có các lớp bên trong vô danh như Java, nhưng nó không có phương pháp ẩn danh và biểu thức lambda, đó là một cách sạch hơn nhiều để đạt được nhất về những gì các lớp bên trong vô danh thường được sử dụng cho. Việc nắm bắt biến cho hai cơ chế là khác nhau - xem my article on closures để biết thêm chi tiết.

2

Trong đầu, sự khác biệt lớn nhất là cách chúng (các lớp ẩn danh trong java so với các phương thức nặc danh trong C#) xử lý các ảnh chụp. Trong java, nó bắt giữ giá trị hiện tại của biến (giá trị ban đầu và giá trị bắt được sau đó được tách biệt). Trong C#, bạn nắm bắt chính biến đó. Điều này là gấp đôi lưỡi, và có thể dẫn đến các vấn đề - nhưng là cực kỳ mạnh mẽ khi được sử dụng một cách chính xác.

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