Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Ngôn ngữ Csharp phần 4 doc
Nội dung xem thử
Mô tả chi tiết
Ngôn Ngữ Lập Trình C#
{
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?
Xây Dựng Lớp - Đối Tượng
121
Ngôn Ngữ Lập Trình C#
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.
Câu hỏi thêm
Câu hỏi 1: Sự khác nhau giữa thành viên được khai báo là public và các thành viên không
được khai báo là public?
Câu hỏi 2: Từ khoá nào được sử dụng trong việc thực thi thuộc tính của lớp?
Câu hỏi 3: Những kiểu dữ liệu nào được trả về từ phương thức?
Câu hỏi 4: Sự khác nhau giữa truyền biến tham chiếu và truyền biến tham trị vào một
phương thức?
Câu hỏi 5: Làm sao truyền tham chiếu với biến kiểu giá trị vào trong một phương thức?
Xây Dựng Lớp - Đối Tượng
122
Ngôn Ngữ Lập Trình C#
Câu hỏi 6: Khi nào thì phương thức khởi dựng được gọi?
Câu hỏi 7: Phương thức khởi dựng tĩnh được gọi khi nào?
Câu hỏi 8: Có thể truyền biến chưa khởi tạo vào một hàm được không?
Câu hỏi 9: Sự khác nhau giữa một lớp và một đối tượng của lớp?
Câu hỏi 10: Thành viên nào trong một lớp có thể được truy cập mà không phải tạo thể hiện
của lớp?
Câu hỏi 11: Lớp mà chúng ta xây dựng thuộc kiểu dữ liệu nào?
Câu hỏi 12: Từ khóa this được dùng làm gì 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?
-----------------------------------------------------------------------------
Xây Dựng Lớp - Đối Tượng
123
Ngôn Ngữ Lập Trình C#
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.
Xây Dựng Lớp - Đối Tượng
124