Thuộc tính chỉ đọc

Một phần của tài liệu Bài giảng Lập trình Net(C sharp) (Trang 113)

Chương 4: XÂY DỰNG LỚP ĐỐI TƯỢNG

4.8 Thuộc tính chỉ đọc

Giả sử chúng ta muốn tạo một phiên bản khác cho lớp Time cung cấp một số giá trị static để hiển thị ngày và giờ hiện hành. Ví dụ 4.12 minh họa cho cách tiếp cận này.

 Ví dụ 4.12: Sử dụng thuộc tính hằng static.

--- using System;

public class RightNow {

// Định nghĩa bộ khởi tạo static cho các biến static static RightNow()

{

Year = dt.Year; Month = dt.Month; Date = dt.Day; Hour = dt.Hour; Minute = dt.Minute; Second = dt.Second; }

// Biến thành viên static public static int Year; public static int Month; public static int Date; public static int Hour; public static int Minute; public static int Second; }

public class Tester {

static void Main() { Console.WriteLine(“This year: {0}”, RightNow.Year.ToString()); RightNow.Year = 2003; Console.WriteLine(“This year: {0}”, RightNow.Year.ToString()); } } ---  Kết quả: This year: 2002 This year: 2003 ---

Đoạn chương trình trên hoạt động tốt, tuy nhiên cho đến khi có một ai đó thay đổi giá trị của biến thành viên này. Như ta thấy, biến thành Year trên đã được thay

đổi đến 2003. Điều này thực sự không như mong muốn của chúng ta.

Chúng ta muốn đánh dấu các thuộc tính tĩnh này không được thay đổi. Nhưng khai báo hằng cũng không được vì biến tĩnh không được khởi tạo cho đến khi phương thức khởi dựng static được thi hành. Do vậy C# cung cấp thêm từ khóa

readonly phục vụ chính xác cho mục đich trên. Với ví dụ trên ta có cách khai báo lại như sau:

public static readonly int Year; public static readonly int Month; public static readonly int Date; public static readonly int Hour; public static readonly int Minute; public static readonly int Second;

Khi đó ta phải bỏ lệnh gán biến thành viên Year, vì nếu không sẽ bị báo lỗi: // RightNow.Year = 2003; // error

Chương trình sau khi biên dịch và thực hiện như mục đích của chúng ta.

Câu hỏi và trả lời

C

âu hỏi 1: Có phải chúng ta chỉ nên sử dụng lớp với các dữ liệu thành viên? Trả

l ời 1 : Nói chung là chúng ta không nên sử dụng lớp chỉ với dữ liệu thành viên. Ý nghĩa của môt lớp hay của lập trình hướng đối tượng là khả năng đóng gói các chức năng và dữ liệu vào trong một gói đơn.

C

âu hỏi 2 : Có phải tất cả những dữ liệu thành viên luôn luôn được khai báo là

public để bên ngoài có thể truy cập chúng?

Trả

l ời 2 : Nói chung là không. Do vấn đề che dấu dữ liệu trong lập trình hướng đối tượng, xu hướng là dữ liệu bên trong chỉ nên dùng cho các phương thức thành viên. Tuy nhiên, như chúng ta đã biết khái niệm thuộc tính cho phép các biến thành viên được truy cập từ bên ngoài thông qua hình thức như là phương thức. C

âu hỏi 3 : Có phải có rất nhiều lớp được xây dựng sẵn và tôi có thể tìm chúng ở đâu? Trả

l ời 3 : Microsoft cung cấp rất nhiều các lớp gọi là các lớp cơ sở .NET. Những lớp này được tổ chức bên trong các namespace. Chúng ta có thể tìm tài liệu về các lớp này trong thư viện trực tuyến của Microsoft. Và một số lớp thường sử dụng cũng được trình bày lần lượt trong các ví dụ của giáo trình này.

C

âu hỏi 4: Sự khác nhau giữa tham số (parameter) và đối mục (argument)? Trả

l ời 4 : Tham số được định nghĩa là những thứ được truyền vào trong một phương thức. Một tham số xuất hiện với định nghĩa của phương thức ở đầu phương thức. Một đối mục là giá trị được truyền vào phương thức. Chúng ta

truyền những đối mục vào phương thức phù hợp với những tham số đã khai báo của phương thức.

C

âu hỏi 5: Chúng ta có thể tạo phương thức bên ngoài của lớp hay không? Trả

l ời 5 : Mặc dù trong những ngôn ngữ khác, chúng ta có thể tạo các phương thức bên ngoài của lớp. Nhưng trong C# thì không, C# là hướng đối tượng, do vậy tất cả các mã nguồn phải được đặt bên trong một lớp.

C

âu hỏi 6 : Có phải những phương thức và lớp trong C# hoạt động tương tự như

trong các ngôn ngữ khác như C++ hay Java?

Trả

l ời 6 : Trong hầu hết các phần thì chúng tương tự như nhau. Tuy nhiên, mỗi ngôn ngữ cũng có những khác biệt riêng. Một ví dụ sự khác nhau là C# không cho phép tham số mặc định bên trong một phương thức. Trong ngôn ngữ C++ thì chúng ta có thể khai báo các tham số mặc định lúc định nghĩa phương thức và khi gọi phương thức thì có thể không cần truyền giá trị vào, phương thức sẽ dùng giá trị mặc định. Trong C# thì không được phép. Nói chung là còn nhiều sự khác nhau nữa, nhưng xin dành cho bạn đọc tự tìm hiểu.

C

âu hỏi 7 : Phương thức tĩnh có thể truy cập được thành viên nào và không truy

cập được thành viên nào trong một lớp?

Trả

l ời 7 : Phương thức tĩnh chỉ truy cập được các thành viên tĩnh trong một lớp.

Bài tập

Bài

tập 1 : Xây dựng một lớp đường tròn lưu giữ bán kính và tâm của đường tròn. Tạo các phương thức để tính chu vi, diện tích của đường tròn.

Bài

t ập 2: Thêm thuộc tính BanKinh vào lớp được tạo ra từ bài tập 1. Bài

tập 3 : Tạo ra một lớp lưu trữ giá trị nguyên tên myNumber. Tạo thuộc tính cho thành viên này. Khi số được lưu trữ thì nhân cho 100. Và khi số được truy cập thì chia cho 100.

Bài

t ập 4 : Chương trình sau có lỗi. Hãy sửa lỗi của chương trình và biên dịch chương trình. Dòng lệnh nào gây ra lỗi?

--- using System;

using System.Console; class VD1

{

public string first; }

class Tester {

public static void Main() {

VD1 vd = new VD1();

Write(“Nhap vao mot chuoi: ”); vd.first = ReadLine();

Write(“Chuoi nhap vao: {0}”, vd.first); }

}

---

Bài

t ập 5 : Chương trình sau có lỗi. Hãy sửa lỗi của chương trình và biên dịch chương trình. Dòng lệnh nào gây ra lỗi?

--- class Class1

{

public static void GetNumber(ref int x, ref int y) {

x = 5; y = 10; }

public static void Main() { int a = 0, b = 0; GetNumber(a, b); System.Console.WriteLine(“a = {0} \nb = {1}”, a, b); } } --- C

âu hỏi 6: Chương trình sau đây có lỗi. Hãy sửa lỗi và cho biết lệnh nào phát sinh lỗi?

--- Class Tester

{

public static void Main() {

Display(); }

public static void Display() { System.Console.WriteLine(“Hello!”); return 0; } } --- C

âu hỏi 7 : Viết lớp giải phương trình bậc hai. Lớp này có các thuộc tính a, b, c và nghiệm x1, x2. Hãy xây dựng theo hướng đối tượng lớp trên. Lớp cho phép bên ngoài xem được các nghiệm của phương trình và cho phép thiết lập hay xem các giá trị a, b, c.

Một phần của tài liệu Bài giảng Lập trình Net(C sharp) (Trang 113)

Tải bản đầy đủ (DOC)

(120 trang)
w