Các trường chỉ đọc Readonly fields: Hằng là một biến mà chứa một giá trị không thay đổi.. Trong một số trường hợp, bạn có một số biến không bị thay đổi nhưng giá trị của nó chỉ được khở
Trang 1
Các trường chỉ đọc( Readonly fields):
Hằng là một biến mà chứa một giá trị không thay đổi Trong C# khái niệm hằng cũng giống như mọi ngôn ngữ khác Tuy nhiên, hằng thì không cần thiết dùng trong mọi trường hợp Trong một số trường hợp, bạn có một số biến không bị thay đổi nhưng giá trị của nó chỉ được khởi tạo khi chương trình thực thi C# hỗ trợ một kiểu biến khác có lợi hơn trong trường hợp này là: các trường chỉ đọc
Từ khoá readonly thì linh động hơn từ khoá const Bởi vì bạn có thể khởi tạo giá trị cho
một trường chỉ đọc trong constructor Và nó cho phép một trường chỉ đọc là một thể
hiện(instance) hay một trường static có các giá trị khác nhau trong mỗi thể hiện của lớp
đó Nếu bạn muốn một trường chỉ đọc là static thì bạn phải khai báo tường minh
Ví dụ: chúng ta có một chương trình chỉnh sửa tài liệu, và chúng ta muốn hạn chế số tài liệu được sửa đồng thời Nhưng bởi vì ta bán phần mềm đó và người sử dụng có thể nâng cấp bản của họ Chúng ta không thể cố định số lượng lớn nhất trong mã nguồn Chúng ta cần một trường để mô tả giá trị lớn nhất này Trường này chỉ được đọc tại mỗi lúc
chương trình được ném ra:
public class DocumentEditor
{
public static readonly uint MaxDocuments;
static DocumentEditor()
{
// code here will read in the value of the max no of documents
// for the sake of argument, let's assume the result is 20
MaxDocuments = 20;
}
Trong ví dụ trên thì giá trị lớn nhất chỉ được cần được lưu trữ khi một thể hiện của
chương trình thực thi Và đó là lý do tại sao nó được khởi tạo trong một constructor tĩnh Tình huống khác, nếu mọi tài liệu chúng ta chỉnh sửa có một ngày được tạo ra và chúng
ta không muốn người sử dụng chỉnh sửa nó Kiểu ngày thì được mô tả trong lớp
system.Datetime
Trang 2public class Document
{
public readonly DateTime CreationDate;
public Document()
{
// read in creation date from file Assume result is 1 Jan 2002
// but in general this can be different for different instances
// of the class
CreationDate = new DateTime(2002, 1, 1);
}
}
Từ hai ví dụ trên ta thấy CreationDate and MaxDocuments là các trường chỉ đọc và nó
không thể được gán giá trị bên ngoài constructor