Tải bản đầy đủ (.pdf) (2 trang)

Tài liệu Hướng Đối Tượng Trong C# part 6 docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (124.77 KB, 2 trang )




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
public 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.

 

×