Phương thức SetTime trên đã minh họa việc sử dụng ba kiểu truyền tham số vào một phương thức. Tham số thứ nhất theHour được truyền vào dạng giá trị, mục đích của tham số này là để thiết lập giá trị cho biến thành viên Hour và tham số này không được sử dụng để về bất cứ giá trị nào. Tham số thứ hai là theMinute được truyền vào phương thức chỉ để nhận giá trị trả về của biến thành viên Minute, do đó tham số này được khai báo với từ khóa out....
Ngơn Ngữ Lập Trình C# The Minute is now: 35 and 24 seconds The Minute is now: 36 and seconds Phương thức SetTime minh họa việc sử dụng ba kiểu truyền tham số vào phương thức Tham số thứ theHour truyền vào dạng giá trị, mục đích tham số để thiết lập giá trị cho biến thành viên Hour tham số không sử dụng để giá trị Tham số thứ hai theMinute truyền vào phương thức để nhận giá trị trả biến thành viên Minute, tham số khai báo với từ khóa out Cuối tham số theSecond truyền vào với khai báo ref, biến tham số vừa dùng để thiết lập giá trị phương thức Nếu theSecond lớn 30 giá trị biến thành viên Minute tăng thêm đơn vị biến thành viên Second thiết lập Sau theSecond gán giá trị biến thành viên Second trả Do hai biến theHour theSecond sử dụng phương thức SetTime nên phải khởi tạo trước truyền vào phương thức Cịn với biến theMinute khơng cần thiết khơng sử dụng phương thức mà nhận giá trị trả Nạp chồng phương thức Thông thường xây dựng lớp, ta có mong muốn tạo nhiều hàm có tên Cũng hầu hết ví dụ trước lớp điều có nhiều phương thức khởi dựng Như lớp Time có phương thức khởi dựng nhận tham số khác nhau, tham số đối tượng DateTime, hay tham số tùy chọn để thiết lập giá trị biến thành viên thơng qua tham số ngun Tóm lại ta xây dựng nhiều phương thức tên nhận tham số khác Chức gọi nạp chồng phương thức Một ký hiệu (signature) phương thức định nghĩa tên phương thức với danh sách tham số phương thức Hai phương thức khác ký hiệu chúng khác khác tức khác tên phương thức khác hay danh sách tham số khác Danh sách tham số xem khác số lượng tham số kiểu liệu tham số Ví dụ đoạn mã sau, phương thức thứ khác phương thức thứ hai số lượng tham số khác Phương thức thứ hai khác phương thức thứ ba kiểu liệu tham số khác nhau: void myMethod( int p1 ); void myMethod( int p1, int p2 ); void myMethod( int p1, string p2 ); Một lớp có số lượng phương thức nào, phương thức lớp phải có ký hiệu khác với tất phương thức thành viên lại lớp 113 Xây Dựng Lớp - Đối Tượng Ngơn Ngữ Lập Trình C# Ví dụ 4.9 minh họa lớp Time có hai phương thức khởi dựng, phương thức nhận tham số đối tượng DateTime cịn phương thức thứ hai nhận sáu tham số nguyên Ví dụ 4.9: Minh họa nạp chồng phương thức khởi dựng using System; public class Time { public void DisplayCurrentTime() { Console.WriteLine(“{0}/{1}/{2} {3}:{4}:{5}”, Date, Month, Year, Hour, Minute, Second); } public Time( System.DateTime dt) { Year = dt.Year; Month = dt.Month; Date = dt.Day; Hour = dt.Hour; Minute = dt.Minute; Second = dt.Second; } public Time(int Year, int Month, int Date, int Hour, int Minute, int Second) { this.Year = Year; this.Month = Month; this.Date = Date; this.Hour = Hour; this.Minute = Minute; this.Second = Second; } // Biến thành viên private private int Year; private int Month; private int Date; private int Hour; private int Minute; private int Second; } 114 Xây Dựng Lớp - Đối Tượng Ngơn Ngữ Lập Trình C# public class Tester { static void Main() { System.DateTime currentTime = System.DateTime.Now; Time t1 = new Time( currentTime); t1.DisplayCurrentTime(); Time t2 = new Time(2002,6,8,18,15,20); t2.DisplayCurrentTime(); } } Kết quả: 2/1/2002 17:50:17 8/6/2002 18:15:20 Như thấy, lớp Time ví dụ minh họa 4.9 có hai phương thức khởi dựng Nếu hai phương thức có ký hiệu trình biên dịch khơng thể biết gọi phương thức khởi tạo hai đối tượng t1 t2 Tuy nhiên, ký hiệu hai phương thức khác tham số truyền vào khác nhau, trình biên dịch xác định phương thức gọi dựa vào tham số Khi thực nạp chồng phương thức, bắt buộc phải thay đổi ký hiệu phương thức, số tham số, hay kiểu liệu tham số Chúng ta tồn quyền thay đổi giá trị trả về, tùy chọn Nếu thay đổi giá trị trả khơng phải nạp chồng phương thức mà hai phương thức khác nhau, tạo hai phương thức ký hiệu khác kiểu giá trị trả tạo lỗi biên dịch Ví dụ 4.10: Nạp chồng phương thức using System; public class Tester { private int Triple( int val) { return 3*val; } private long Triple(long val) { return 3*val; 115 Xây Dựng Lớp - Đối Tượng Ngơn Ngữ Lập Trình C# } public void Test() { int x = 5; int y = Triple(x); Console.WriteLine(“x: {0} y: {1}”, x, y); long lx = 10; long ly = Triple(lx); Console.WriteLine(“lx: {0} ly:{1}”, lx, ly); } static void Main() { Tester t = new Tester(); t.Test(); } } Kết quả: x: y: 15 lx: 10 ly:30 Trong ví dụ này, lớp Tester nạp chồng hai phương thức Triple(), phương thức nhận tham số nguyên int, phương thức lại nhận tham số số nguyên long Kiểu giá trị trả hai phương thức khác nhau, điều khơng địi hỏi thích hợp trường hợp Đóng gói liệu với thành phần thuộc tính Thuộc tính khái niệm cho phép truy cập trạng thái lớp thay thơng qua truy cập trực tiếp biến thành viên, đựơc thay việc thực thi truy cập thông qua phương thức lớp Đây thật điều lý tưởng Các thành phần bên (client) muốn truy cập trạng thái đối tượng không muốn làm việc với phương thức Tuy nhiên, người thiết kế lớp muốn dấu trạng thái bên lớp mà xây dựng, cung cấp cách gián tiếp thông qua phương thức Thuộc tính đặc tính giới thiệu ngơn ngữ C# Đặc tính cung cấp khả bảo vệ trường liệu bên lớp việc đọc viết chúng thông qua thuộc tính Trong ngơn ngữ khác, điều thực thông qua việc tạo phương thức lấy liệu (getter method) phương thức thiết lập liệu (setter method) 116 Xây Dựng Lớp - Đối Tượng Ngơn Ngữ Lập Trình C# Thuộc tính thiết kế nhắm vào hai mục đích: cung cấp giao diện đơn cho phép truy cập biến thành viên, Tuy nhiên cách thức thực thi truy cập giống phương thức liệu che dấu, đảm bảo cho yêu cầu thiết kế hướng đối tượng Để hiểu rõ đặc tính ta xem ví dụ 4.11 bên dưới: Ví dụ 4.11: Sử dụng thuộc tính using System; public class Time { public void DisplayCurrentTime() { Console.WriteLine(“Time\t: {0}/{1}/{2} {3}:{4}:{5}”, date, month, year, hour, minute, second); } public Time( System.DateTime dt) { year = dt.Year; month = dt.Month; date = dt.Day; hour = dt.Hour; minute = dt.Minute; second = dt.Second; } public int Hour { get { return hour; } set { hour = value; } } // Biến thành viên private private int year; private int month; private int date; 117 Xây Dựng Lớp - Đối Tượng ...Ngơn Ngữ Lập Trình C# Ví dụ 4.9 minh họa lớp Time có hai phương thức khởi dựng, phương thức nhận tham số đối tượng DateTime phương thức thứ hai nhận sáu tham số nguyên Ví dụ 4.9:... minh họa 4.9 có hai phương thức khởi dựng Nếu hai phương thức có ký hiệu trình biên dịch biết gọi phương thức khởi tạo hai đối tượng t1 t2 Tuy nhiên, ký hiệu hai phương thức khác tham số truyền... vào khác nhau, trình biên dịch xác định phương thức gọi dựa vào tham số Khi thực nạp chồng phương thức, bắt buộc phải thay đổi ký hiệu phương thức, số tham số, hay kiểu liệu tham số Chúng ta tồn