Thông tin tài liệu:
Gía trị với Tham chiếuCó những cách khác nhau để một trình biên dịch nói về dữ liệu, và C# có hai cách. Mọi kiểu dữ liệu trong C# đều rơi vào một trong hai loại: Kiểu giá trị (Value type) Kiểu tham chiếu (Reference type)
Nội dung trích xuất từ tài liệu:
Lập trình C# - Phần 3: Giới thiệu về lớp (THPT Chuyên Lê Hồng Phong)Câu lạc bộ Khoa học - THPT Chuyên Lê Hồng Phong TPHCM LHPSCLập trình C#Dịch từ cuốn sách Beginning C Sharp Game ProgrammingPhần 3: Giới thiệu về LớpGía trị với Tham chiếuCó những cách khác nhau để một trình biên dịch nói về dữ liệu, và C# có hai cách. Mọi kiểu dữ liệutrong C# đều rơi vào một trong hai loại: Kiểu giá trị (Value type) Kiểu tham chiếu (Reference type)Tôi sẽ giải thích các điểm khác nhau của mỗi loại trong những mục sau.Kiểu dữ liệuMột kiểu giá trị thường là một miếng nhỏ của dữ liệu mà hệ thống dành rất ít thời gian để sắp xếp.Bạn đã sử dụng kiểu giá trị trong Phần 2 với tất cả các kiểu dữ liệu số được xây dựng sẵn. Mọi thứđược liệt kê trong bảng 2.1 – như là int, float và vâng vâng – là một kiểu giá trị.Ghi chú Kiểu giá trị được tạo trên ngăn xếp hệ thống (system stack). Bạn không cần thiết để biết nó là gì, nhưng nếu bạn cảm thấy thú vị, tôi khuyên bạn rằng nên tự nghiên cứu nó. Chủ đề này vượt ra ngoài phạm vi của quyển sách này, vì vậy tôi không đủ chỗ để giải thích nó ở đây, nhưng nó sẽ giúp bạn hiểu chính xác làm sao máy vi tính hoạt động, nó sẽ ảnh hưởng đến việc tạo chương trình của bạn nhanh hơn và hiệu quả hơn.Kiểu giá trị đơn giản và rất minh bạch để sử dụng, như là đoạn mã sau:int x = 10, y = 20;x = y; // Giá trị của y được chép vào xy = 10; // y được gán bằng 10Bên cạnh những kiểu đượcdựng sẵn, cấu trúc (structure) cũng là một kiểu giá trị, nhưng tôi sẽ đề cậpvề sau trong phần này.Kiểu tham chiếuKiểu tham chiếu hoàn toàn khác biệt so với kiểu giá trị. Lớp, khác với cấu trúc, luôn luôn là kiểu thamchiếu. Kiểu tham chiếu, thay vì lưu dữ liệu một cách trực tiếp, nó lại lưu một địa chỉ, và địa chỉ đó trỏtới dữ liệu thật trong nơi nào đó của máy vi tính. Xem hình 3.1.Khai báo một Kiểu Tham chiếuMột trong những điểm khác nhau lớn nhất giữa kiểu giá trị và tham chiếu là cách mà bạn khai báo chonó. Một kiểu tham chiếu phải được tạo bởi từ khóa new (giả sử như chúng ta có một lớp tên Foo):Foo x = new Foo();Lập trình C# - Phần 3: Giới thiệu về Lớp Trang 1Câu lạc bộ Khoa học - THPT Chuyên Lê Hồng Phong TPHCM LHPSCTrông có vẻ nhiều việc cần làm, nhưng bạn sẽ quen với nó. Cơ bản, đoạn mã thực hiện hai công việc.Đó là: 1. Tạo một kiểu tham chiếu mới tên x, và 2. Tạo một đối tượng Foo mới trong đống dữ liệu và trỏ x đến đó. int x Kiểu giá trị 10 Int32 y địa chỉ của 10 Kiểu tham chiếu dữ liệuHình 3.1 Kiểu giá trị được lưu trực tiếp, trong khi kiểu tham chiếu lưu một địa chỉ trỏ tới dữ liệu thật.Ghi chú Đống dữ liệu (Heap) là một phần khác của máy vi tính để lưu trữ dữ liệu. Tôi không có đủ chỗ để giải thích nó ở đây; đó chỉ là một vài thứ khác bạn nên nghiên cứu cho riêng bạn nên bạn cảm thấy thú vị.Đương nhiên, bạn không cần phải thực hiện chúng một lượt. Bạn có thể dễ dàng tách chúng ra như thếnày:Foo x;x = new Foo();Nó tùy thuộc vào bạn.Chơi đùa với các Tham chiếuVà bây giờ là lúc để chơi đùa với các tham chiếu, nó là thứ mà bạn chưa gặp trước đây. Không maycho bạn, các tham chiếu không hoạt động theo cách của các kiểu dữ liệu, mà nó có thể gây bối rối mộtchút.Đây là phần mà các tham chiếu có vẻ hơi khó hiểu một chút. Bạn hoàn toàn phải nhớ điều này mọi lúcmôi nơi khi sử dụng các tham chiếu, còn không chươn trình của bạn sẽ trở thành một mớ hỗn độn. Vídụ, hãy thử đoán xem đoạn mã này làm gì:Foo x = new Foo();Foo y = new Foo();y = x;// Thay đổi y ở đâyBạn có nghĩ sau khi đọan mã này thực thi, x giữ nguyên trạng thái ban đầu và y thay đổi, đúngkhông ? Sai !!! Chúng cùng thay đổi. Hãy nghe tôi – có một chút khó khăn để nhìn nhận nó, nhưng nócó nghĩa. Sơ đồ có thể giúp, nhìn hình 3.2.Lập trình C# - Phần 3: Giới thiệu về Lớp Trang 2Câu lạc bộ Khoa học - THPT Chuyên Lê Hồng Phong TPHCM LHPSC x dữ liệu Foo x = new Foo(); Foo y = new Foo(); y dữ liệu x dữ liệu y = x; y dữ liệu x dữ liệu thay đổi // Thay đổi y ...