Tôi sẽ bắt đầu với int
phần. int
là một kiểu giá trị và trong .Net, điều đó có nghĩa là bạn thực sự đang xử lý một bản sao. Đó là một ràng buộc thiết kế thực sự kỳ lạ khi nói với một phương pháp "Bạn có thể có một bản sao của giá trị này. Đó là bản sao của bạn, không phải của tôi; Tôi sẽ không bao giờ nhìn thấy nó nữa. Nhưng bạn không thể thay đổi bản sao." Trong lời gọi phương thức, việc sao chép giá trị này là được, nếu không thì chúng ta không thể gọi phương thức một cách an toàn. Nếu phương thức cần bản gốc, hãy để người thực hiện tạo một bản sao để lưu. Cung cấp giá trị cho phương thức hoặc không cung cấp giá trị cho phương thức. Đừng đi tất cả những điều khôn ngoan ở giữa.
Hãy chuyển sang các loại tham chiếu. Bây giờ nó có một chút khó hiểu. Ý của bạn là một tham chiếu không đổi, nơi mà bản thân tham chiếu không thể thay đổi được, hay một đối tượng hoàn toàn bị khóa, không thể thay đổi? Nếu trước đó, các tham chiếu trong .Net theo mặc định được chuyển theo giá trị. Đó là, bạn nhận được một bản sao của tài liệu tham khảo. Vì vậy, về cơ bản chúng ta có cùng một tình huống như đối với các loại giá trị. Nếu người triển khai sẽ cần tham chiếu ban đầu, họ có thể tự giữ nó.
Điều đó chỉ để lại cho chúng ta đối tượng không đổi (bị khóa / không thay đổi). Điều này có vẻ ổn từ góc độ thời gian chạy, nhưng làm cách nào để trình biên dịch thực thi nó? Vì tất cả các thuộc tính và phương pháp đều có thể có tác dụng phụ, về cơ bản bạn sẽ bị giới hạn quyền truy cập trường chỉ đọc. Một đối tượng như vậy có thể không thú vị lắm.