Sự khác biệt giữa Constant và ReadOnly

Điều quan trọng là phải hiểu các khái niệm về lập trình C # trước khi bạn tiến hành triển khai mã. Trước khi chúng ta chuyển sang sự khác biệt giữa const và chỉ đọc, trước tiên hãy hiểu từ khóa và cách chúng được sử dụng trong một chương trình. Cả hai đều là những từ khóa phổ biến nhất được sử dụng trong lập trình C # và về cơ bản cho cùng một mục đích. Tuy nhiên, cả hai từ khóa rất khác nhau. Const là một từ dành riêng được sử dụng để biểu thị các giá trị không đổi và nó chỉ định rằng giá trị không thể được sửa đổi sau thời gian biên dịch, trong khi chỉ đọc là một công cụ sửa đổi có thể được sử dụng trên các trường và giá trị có thể thay đổi trong thời gian chạy. Chúng ta hãy xem một số khác biệt chính giữa const và chỉ đọc.

Const là gì?

Const đề cập đến một biến không đổi và giá trị cần được chỉ định một lần, trong khi khai báo. Khi từ khóa const được sử dụng trong một khai báo, nó trở thành một hằng số có nghĩa là giá trị không đổi và không thể thay đổi trong suốt chương trình. Đó là nhiều từ dành riêng chỉ định rằng giá trị không được sửa đổi sau thời gian biên dịch. Một const mặc định là tĩnh theo mặc định, do đó, nó có thể được gọi với tên lớp bằng cách sử dụng Class Classname.VariableName tựa. Các giá trị không đổi cũng được gọi là chữ. Nó có thể thuộc bất kỳ kiểu dữ liệu cơ bản nào, chẳng hạn như const const, const const hoặc chuỗi ký tự.

Chỉ đọc là gì?

Từ khóa Readonly là một công cụ sửa đổi chỉ có thể được sử dụng trên các trường chứ không phải các biến cục bộ. Một trường chỉ đọc có thể được khởi tạo tại thời điểm khai báo hoặc bên trong một hàm tạo trong cùng một lớp, do đó các giá trị có thể khác nhau đối với các lần thực hiện khác nhau của chương trình tùy thuộc vào hàm tạo được sử dụng. Từ khóa readonly chỉ định rằng một biến đối tượng của một đối tượng không thể sửa đổi và bất kỳ nỗ lực nào để sửa đổi nó sau khi khai báo dẫn đến lỗi biên dịch. Biến không trở thành không thể sửa đổi cho đến sau khi thực hiện. Các biến được thực hiện chỉ đọc để dừng việc gọi mã vô tình sửa đổi nó sau khi nó được xây dựng.

Sự khác biệt giữa Constant và ReadOnly

  1. Căn bản

Từ khóa hằng (const) không có gì ngoài các biến không thay đổi, giá trị chỉ có thể được khởi tạo tại thời điểm biên dịch. Những giá trị không đổi này cũng được gọi là chữ. Nó chỉ đơn giản cho phép chúng ta xác định xem một biến có thể sửa đổi hay không. Nói một cách đơn giản, các hằng số là hoàn toàn tĩnh và chúng nên được khởi tạo trước khi chúng được sử dụng trong chương trình. Mặt khác, từ khóa chỉ đọc là một công cụ sửa đổi có thể được sử dụng trên các trường và giá trị có thể thay đổi trong thời gian chạy. Nó ngăn các trường bị thay đổi và các giá trị có thể được đặt thông qua các biến tham chiếu.

  1. Khởi tạo

Một const là tĩnh theo mặc định và các giá trị sẽ được gán tại thời điểm khai báo biến có nghĩa là các giá trị được gán chỉ tại thời gian biên dịch. Một hằng số được khai báo bằng cách sử dụng từ khóa của const const. Việc khởi tạo trường không đổi phải là biểu thức không đổi và có thể không được sửa đổi. Nói một cách đơn giản, một const là hằng số thời gian biên dịch. Mặt khác, một trường chỉ đọc, chỉ có thể được khởi tạo ở cấp lớp không nằm trong phương thức và trường không thể được sửa đổi sau khi khởi tạo. Nói cách khác, các biến chỉ đọc có thể được khởi tạo tại thời điểm khai báo hoặc bên trong hàm tạo.

  1. Cấp phát bộ nhớ

Một giá trị const được đặt trực tiếp vào mã vì nó đóng vai trò thay thế thời gian biên dịch. Trình biên dịch đặt giá trị không đổi trong siêu dữ liệu lắp ráp xác định hằng số và nhúng giá trị vào chính mã IL sau khi khởi tạo, do đó không cần bộ nhớ cho các hằng số trong thời gian chạy để cấp phát. Giá trị chỉ đọc không phải là hằng số và nó được lưu trữ trong bộ tải chất đống bộ nhớ không thể phân bổ cho đến khi loại của nó được tải. Các trường chỉ đọc được lưu trữ trong bộ nhớ động để các giá trị chỉ có thể thu được khi chạy.

  1. Phiên bản nhị phân

Mặc dù cả hai từ khóa được sử dụng gần như cho cùng một mục đích, chúng có ngữ nghĩa phiên bản nhị phân khác nhau. Khi một biểu thức tham chiếu một hằng số, trình biên dịch sẽ nhúng giá trị tại thời gian biên dịch. Vì vậy, nếu giá trị được sử dụng trong một hội đồng khác, lắp ráp ban đầu cần được cập nhật và nên thay đổi giá trị. Những thay đổi trong lắp ráp không được phản ánh cho đến khi nó được biên dịch lại. Giá trị không thu được cho đến khi thời gian chạy khi một biểu thức tham chiếu trường chỉ đọc. Nếu giá trị được thay đổi trong một tổ hợp khác, các thay đổi sẽ được phản ánh trong tổ hợp ngay khi được tải mà không cần biên dịch lại.

Const vs Readonly: Biểu đồ so sánh

Tóm tắt về Const so với Readonly

Cả hai từ khóa được sử dụng cho cùng một điều là khai báo một thành viên để các giá trị không thể thay đổi trong suốt chương trình. Tuy nhiên, từ khóa const rất khác với từ khóa chỉ đọc. Const là một biến không đổi, giá trị cần được khởi tạo tại thời gian biên dịch, trong khi trường chỉ đọc chỉ có thể được khởi tạo ở cấp lớp, tại thời điểm khai báo hoặc bên trong hàm tạo. Const là hằng số thời gian biên dịch trong khi các trường chỉ đọc là chỉ đọc. Các biến Constance có thể được truy cập bằng cách sử dụng Class Classname.VariableName. Hơn nữa, các biến const có thể được khai báo trong các phương thức, trong khi các trường chỉ đọc không thể được khai báo trong các phương thức.