Thường thường, khi muốn định nghĩa một phương thức khởi dựng riêng ta phải
cung cấp các tham số để hàm khởi dựng có thể khởi tạo các giá trị khác ngoài giá
trị mặc định cho các đối tượng. Quay lại ví dụ 4.1 giả sử ta muốn truyền thời gian
hiện hành: năm, tháng, ngày,…để đối tượng có ý nghĩa hơn.
Để định nghĩa một bộ khởi dựng riêng ta phải khai báo một phươ
ng thức có tên giống
như tên
lớp đã khai báo. Phương thức khởi dựng không có giá trị trả về và được khai báo
là public. Nếu phương thức khởi dựng này được truyền tham số thì phải khai báo
danh sách tham số giống như khai báo với bất kỳ phương thức nào trong một lớp.
Ví dụ 4.3 được viết lại từ ví dụ 4.1 và thêm một bộ khởi dựng riêng, phương phức
khởi dựng này sẽ nh
ận một tham số là một đối tượng kiểu DateTime do C# cung
cấp. Ví dụ 4.3: Định nghĩa một bộ khởi dựng.
-----------------------------------------------------------------------------
using System;
public class ThoiGian
{public void ThoiGianHienHanh()
{
int Giay;
}public class Tester
{static void Main()
{System.DateTime currentTime =
System.DateTime.Now; ThoiGian t = new ThoiGian(
currentTime ); t.ThoiGianHienHanh();
}
}-----------------------------------------------------------------------------
Kết quả:
ThoiGian t = new ThoiGian( currentTime );
Bên trong phương thức khởi dựng này tham số dt sẽ tham chiếu đến đối tượng
DateTime là đối tượng vừa tạo mà currentTime cũng tham chiếu. Nói cách khác lúc
này tham số dt và currentTime cùng tham chiếu đến một đối tượng DateTime trong bộ
nhớ. Nhờ vậy phương thức khởi dựng ThoiGian có thể truy cập được các biến thành
viên public của đối tượng DateTime được tạo trong hàm Main().
Có một sự nhấn mạnh ở đây là đối tượng DateTime được truyền cho bộ dựng
ThoiGian chính là đối tượng đã được tạo trong hàm Main và là kiểu dữ liệu tham chiếu.
Do vậy khi thực hiện truyền tham số là một kiểu dữ liệu tham chiếu thì con trỏ
được
ánh xạ qua chứ hoàn toàn không có một đối tượng nào được sao chép lại. Khởi tạo biến thành viên
Các biến thành viên có thể được khởi tạo trực tiếp khi khai báo trong quá trình khởi tạo,
thay vì phải thực hiện việc khởi tạo các biến trong bộ khởi dựng. Để thực hiện việc
khởi tạo này rất đơn giản là việc sử dụng phép gán giá trị cho một biến:
private int Giay = 30; // Khở
i tạo
Việc khởi tạo biến thành viên sẽ rất có ý nghĩa, vì khi xác định giá trị khởi tạo như
vậy thì biến sẽ không nhận giá trị mặc định mà trình biên dịch cung cấp. Khi đó nếu
các biến này không được gán lại trong các phương thức khởi dựng thì nó sẽ có giá trị
mà ta đã khởi tạo. Ví dụ 4.4 minh họa việc khởi tạo biến thành viên khi khai báo.
Trong ví dụ này sẽ có hai bộ dựng ngoài bộ dự
ng mặc định mà trình biên dịch cung
cấp, một bộ dựng thực hiện việc gán
giá trị cho tất cả các biến thành viên, còn bộ dựng thứ hai thì cũng tương tự nhưng sẽ
không gán giá trị cho biến Giay.
Ngay = dt.Day;
Gio = dt.Hour;
Phut = dt.Minute;
Giay = dt.Second; // có gán cho biến thành viên Giay
}public ThoiGian(int Year, int Month, int Date, int Hour, int Minute)
{Nam = Year;
Thang = Month;
Ngay = Date;
Gio = Hour;
Phut = Minute;
}private int Nam;
private int Thang;
private int Ngay;
private int Gio;
private int Phut;
private int Giay = 30 ; // biến được khởi tạo.