Tạo đối tượng

9 157 0
Tạo đối tượng

Đang tải... (xem toàn văn)

Thông tin tài liệu

Tạo đối tượng Tạo đối tượng Bởi: Khuyet Danh Trong Chương trước có đề cập đến khác kiểu liệu giá trị kiểu liệu tham chiếu Những kiểu liệu chuẩn C# int, char, float,… kiểu liệu giá trị,và biến tạo từ kiểu liệu lưu stack Tuy nhiên, với đối tượng kiểu liệu tham chiếu tạo heap, sử dụng từ khóa new để tạo đối tượng: ThoiGian t = new ThoiGian(); t thật không chứa giá trị đối tượng ThoiGian, chứa địa đối tượng tạo heap, t chứa tham chiếu đến đối tượng mà Bộ khởi dựng Thử xem lại ví dụ minh họa trước, câu lệnh tạo đối tượng cho lớp ThoiGian tương tự việc gọi thực phương thức: ThoiGian t = new ThoiGian(); Đúng vậy, phương thức gọi thực tạo đối tượng Phương thức gọi khởi dựng (constructor) Các phương thức định nghĩa xây dựng lớp, ta không tạo CLR thay mặt mà tạo phương thức khởi dựng cách mặc định Chức khởi dựng tạo đối tượng xác định lớp đặt trạng thái hợp lệ Trước khởi dựng thực đối tượng chưa cấp phát nhớ Sau khởi dựng thực hoàn thành nhớ lưu giữ thể hợp lệ lớp vừa khai báo Lớp ThoiGian ví dụ không định nghĩa khởi dựng Do không định nghĩa nên trình biên dịch cung cấp khởi dựng cho Phương thức khởi dựng mặc định tạo cho đối tượng không thực hành động nào, tức bên thân phương thức rỗng Các biến thành viên khởi tạo giá trị tầm thường thuộc tính nguyên có giá trị chuỗi khởi tạo rỗng, Bảng 4.2 sau tóm tắt giá trị mặc định gán cho kiểu liệu 1/9 Tạo đối tượng Giá trị mặc định kiểu liệu Kiểu liệu Giá trị mặc định int, long, byte,… bool false char ‘\0’ (null) enum reference null Thường thường, muốn định nghĩa phương thức khởi dựng riêng ta phải cung cấp tham số để hàm khởi dựng khởi tạo giá trị khác giá trị mặc định cho đối tượng Quay lại ví dụ 4.1 giả sử ta muốn truyền thời gian hành: năm, tháng, ngày,…để đối tượng có ý nghĩa Để định nghĩa khởi dựng riêng ta phải khai báo phương thức có tên giống tên lớp khai báo Phương thức khởi dựng giá trị trả khai báo public Nếu phương thức khởi dựng truyền tham số phải khai báo danh sách tham số giống khai báo với phương thức lớp Ví dụ viết lại từ ví dụ trước thêm khởi dựng riêng, phương phức khởi dựng nhận tham số đối tượng kiểu DateTime C# cung cấp Định nghĩa khởi dựng using System; public class ThoiGian { public void ThoiGianHienHanh() { Console.WriteLine(" Thoi gian hien hanh la : {0}/{1}/{2}{3}:{4}:{5}", Ngay, Thang, Nam, Gio, Phut, Giay); } 2/9 Tạo đối tượng // Hàm khởi dựng public ThoiGian( System.DateTime dt ) { Nam = dt.Year; Thang = dt.Month; Ngay = dt.Day; Gio = dt.Hour; Phut = dt.Minute; Giay = dt.Second; } // Biến thành viên private int Nam; int Thang; int Ngay; int Gio; int Phut; int Giay; } public class Tester { static void Main() { System.DateTime currentTime = System.DateTime.Now; ThoiGian t = new ThoiGian( currentTime ); t.ThoiGianHienHanh(); 3/9 Tạo đối tượng } } Kết quả: Thoi gian hien hanh la: 5/6/2002 9:10:20 Trong ví dụ phương thức khởi dựng lấy đối tượng DateTime khởi tạo tất biến thành viên dựa giá trị đối tượng Khi phương thức thực xong, đối tượng ThoiGian tạo biến đối tượng khởi tạo Hàm ThoiGianHienHanh gọi hàm Main() hiển thị giá trị thời gian lúc đối tượng tạo Chúng ta thử bỏ số lệnh khởi tạo phương thức khởi dựng cho thực chương trình lại biến không khởi tạo có giá trị mặc định 0, biến nguyên Một biến thành viên kiểu nguyên thiết lập giá trị không gán phương thức khởi dựng Chú ý kiểu liệu giá trị không khởi tạo, ta không khởi tạo trình biên dịch cung cấp giá trị mặc định theo bảng Ngoài chương trình có sử dụng đối tượng lớp DateTime, lớp DateTime cung cấp thư viện System, lớp cung cấp biến thành viên public như: Year, Month, Day, Hour, Minute, Second tương tự lớp ThoiGian Thêm vào lớp có đưa phương thức thành viên tĩnh tên Now, phương thức Now trả tham chiếu đến thể đối tượng DateTime khởi tạo với thời gian hành Theo lệnh : System.DataTime currentTime = System.DateTime.Now(); thực phương thức tĩnh Now() tạo đối tượng DateTime nhớ heap trả tham chiếu tham chiếu gán cho biến đối tượng currentTime Sau đối tượng currentTime tạo câu lệnh thực việc truyền đối tượng currentTime cho phương thức khởi dựng để tạo đối tượng ThoiGian: ThoiGian t = new ThoiGian( currentTime ); 4/9 Tạo đối tượng Bên phương thức khởi dựng tham số dt tham chiếu đến đối tượng DateTime đối tượng vừa tạo mà currentTime tham chiếu Nói cách khác lúc tham số dt currentTime tham chiếu đến đối tượng DateTime nhớ Nhờ phương thức khởi dựng ThoiGian truy cập biến thành viên public đối tượng DateTime tạo hàm Main() Có nhấn mạnh đối tượng DateTime truyền cho dựng ThoiGian đối tượng tạo hàm Main kiểu liệu tham chiếu Do thực truyền tham số kiểu liệu tham chiếu trỏ ánh xạ qua hoàn toàn đối tượng chép lại Khởi tạo biến thành viên Các biến thành viên khởi tạo trực tiếp khai báo trình khởi tạo, thay phải thực việc khởi tạo biến khởi dựng Để thực việc khởi tạo đơn giản việc sử dụng phép gán giá trị cho biến: private int Giay = 30; // Khởi tạo Việc khởi tạo biến thành viên có ý nghĩa, xác định giá trị khởi tạo biến không nhận giá trị mặc định mà trình biên dịch cung cấp Khi biến không gán lại phương thức khởi dựng 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 khai báo Trong ví dụ có hai dựng dựng mặc định mà trình biên dịch cung cấp, dựng thực việc gán giá trị cho tất biến thành viên, dựng thứ hai tương tự không gán giá trị cho biến Giay Minh hoạ sử dụng khởi tạo biến thành viên public class ThoiGian { public void ThoiGianHienHanh() { System.DateTime now = System.DateTime.Now; System.Console.WriteLine("\n {3}:{4}:{5}", Hien tai: \t {0}/{1}/{2} 5/9 Tạo đối tượng now.Day, now.Month, now.Year, now.Hour, now.Minute, now.Second); System.Console.WriteLine(" Thoi Gian:\t {0}/{1}/{2} {3}:{4}:{5}", Ngay, Thang, Nam, Gio, Phut, Giay); } public ThoiGian( System.DateTime dt) { Nam = dt.Year; Thang = dt.Month; 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; } 6/9 Tạo đối tượng private int Nam; private int Thang; private int Ngay; private int Gio; private int Phut; private int Giay = 30 ; // biến khởi tạo } public class Tester { static void Main() { System.DateTime currentTime = System.DateTime.Now; ThoiGian t1 = new ThoiGian( currentTime ); t1.ThoiGianHienHanh(); ThoiGian t2 = new ThoiGian(2001,7,3,10,5); t2.ThoiGianHienHanh(); } } Kết quả: Hientai: 5/6/2002 10:15”5 Thoigian: 5/6/2002 10:15:5 7/9 Tạo đối tượng Hientai: 5/6/2002 10:15”5 Thoigian: 3/7/2001 10:5:30 Nếu không khởi tạo giá trị biến thành viên khởi dựng mặc định khởi tạo giá trị mặc định cho biến thành viên có kiểu nguyên Tuy nhiên, trường hợp biến thành viên Giay khởi tạo giá trị 30: Giay = 30; // Khởi tạo Trong trường hợp khởi tạo thứ hai không truyền giá trị cho biến Giay nên biến lấy giá trị mà ta khởi tạo ban đầu 30: ThoiGian t2 = new ThoiGian(2001, 7, 3, 10, 5); t2.ThoiGianHienHanh(); Ngược lại, giá trị gán cho biến Giay khởi tạo thứ giá trị chồng lên giá trị khởi tạo Trong ví dụ lần tạo đối tượng ThoiGian ta truyền vào đối tượng DateTime nên hàm khởi dựng thứ thực hiện, hàm gán giá trị cho biến Giay Còn tạo đối tượng ThoiGian thứ hai, hàm khởi dựng thứ hai thực hiện, hàm không gán giá trị cho biến Giay nên biến lưu giữ lại giá trị 30 khởi tạo ban đầu Bộ khởi dựng chép Bộ khởi dựng chép thực việc tạo đối tượng cách chép tất biến từ đối tượng có kiểu liệu Ví dụ muốn đưa đối tượng ThoiGian vào khởi dựng lớp ThoiGian để tạo đối tượng ThoiGian có giá trị với đối tượng ThoiGian cũ Hai đối tượng hoàn toàn khác giống giá trị biến thành viên khởi dựng Ngôn ngữ C# không cung cấp khởi dựng chép, phải tự tạo Việc chép thành phần từ đối tượng ban đầu cho đối tượng sau: public ThoiGian( ThoiGian tg) { Nam = tg.Nam; Thang = tg.Thang; Ngay = tg.Ngay; Gio = tg.Gio; Phut = tg.Phut; Giay = tg.Giay; } 8/9 Tạo đối tượng Khi ta chép từ đối tượng ThoiGian hữu sau: ThoiGian t2 = new ThoiGian( t1 ); Trong t1 đối tượng ThoiGian tồn tại, sau lệnh thực xong đối tượng t2 tạo đối tượng t1 Từ khóa this Từ khóa this dùng để tham chiếu đến thể hiện hành đối tượng Tham chiếu this xem trỏ ẩn đến tất phương thức thuộc tính tĩnh lớp Mỗi phương thức tham chiếu đến phương thức khác biến thành viên thông qua tham chiếu this Tham chiếu this sử dụng thường xuyên theo ba cách: Sử dụng biến thành viên bị che lấp tham số đưa vào, trường hợp sau: public void SetYear( int Nam) { this.Nam = Nam; } Như đoạn mã phương thức SetYear thiết lập giá trị biến thành viên Nam, nhiên tham số đưa vào có tên Nam, trùng với biến thành viên, nên ta phải dùng tham chiếu this để xác định rõ biến thành viên tham số truyền vào Khi this.Nam đến biến thành viên đối tượng, Nam đến tham số Sử dụng tham chiếu this để truyền đối tượng hành vào tham số phương thức đối tượng khác: public void Method1( OtherClass otherObject ) { // Sử dụng tham chiếu this để truyền tham số // thân đối tượng thực otherObject.SetObject( this ); } Như cho thấy cần truyền tham số thân đối tượng thực ta bắt buộc phải dùng tham chiếu this để truyền Các thứ ba sử dụng tham chiếu this mảng mục (indexer), phần trình bày chi tiết sau 9/9 ... khởi tạo ban đầu Bộ khởi dựng chép Bộ khởi dựng chép thực việc tạo đối tượng cách chép tất biến từ đối tượng có kiểu liệu Ví dụ muốn đưa đối tượng ThoiGian vào khởi dựng lớp ThoiGian để tạo đối tượng. .. chiếu tham chiếu gán cho biến đối tượng currentTime Sau đối tượng currentTime tạo câu lệnh thực việc truyền đối tượng currentTime cho phương thức khởi dựng để tạo đối tượng ThoiGian: ThoiGian t... 4/9 Tạo đối tượng Bên phương thức khởi dựng tham số dt tham chiếu đến đối tượng DateTime đối tượng vừa tạo mà currentTime tham chiếu Nói cách khác lúc tham số dt currentTime tham chiếu đến đối tượng

Ngày đăng: 31/12/2015, 21:47

Từ khóa liên quan

Mục lục

  • Tạo đối tượng

  • Bộ khởi dựng

  • Khởi tạo biến thành viên

  • Bộ khởi dựng sao chép

  • Từ khóa this

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan