Thông tin tài liệu:
Nối tiếp nội dung của phần 1 cuốn "Giáo trình C# và ứng dụng", phần 2 trình bày các nội dung: Lập trình hướng đối tượng với C#, xử lý dữ liệu với ADO.NET. Mời các bạn cùng tham khảo nội dung chi tiết.
Nội dung trích xuất từ tài liệu:
Giáo trình C# và ứng dụng: Phần 2 CHƯƠNG 3 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI C#Trong phần trước chúng ta đã thấy cách sử dụng của lớp đôi tượng. Ở đây, chúng ta sẽnhắc lại một số khái niệm và tính chất của lớp đối tượng trước khi nói về tính hướng đốitượng.Lớp đối tượng được định nghĩa theo cú pháp:class MyClass{ private int someField; public string SomeMethod(bool parameter) { }}Lớp đối tượng chứa các thành viên – thành viên là thuật ngữ được sử dụng để nói đến dữliệu hoặc hàm được định nghĩa trong lớp. Thuật ngữ hàm (funciton) được dùng để nói đếnbất kỳ thành viên nào có chứa mã lệnh, bao gồm phương thức (method), thuộc tính(property), hàm khởi dựng (constructor), hàm nạp chồng toán tử (operator overload).Lớp đối tượng trong C# là kiểu dữ liệu tham chiếu. Điều này có nghĩa là khi bạn khai báomột biến có kiểu dữ liệu lớp thì xem như bạn có một biến có thể chứa tham chiếu đến mộtthể hiện của lớp đối tượng đó. Bạn cũng cần phải khởi tạo ra đối tượng bằng cách dùngtoán tử new.MyClass myObject;myObject = new MyClass();Cả hai thao tác khai báo và khởi tạo đối tượng có thể được làm một lần như thế này:MyClass myObject = new MyClass();Do là dữ liệu kiểu tham chiếu, nên phép gán hai biến tham chiếu có ý nghĩa là cho haibiến dữ liệu tham chiếu đến cùng một đối tượng.MyClass myObjectRef = myObject;Tức là myObjectRef sẽ cùng tham chiếu đến cùng đối tượng mà myObject đang thamchiếu đến. Các phương thức của đối tượng được tham chiếu đến có thể được triệu gọi từGiáo trình Visual Studio .NET 52cả myObjectRef và myObject.3.1 Đơn kế thừa trong C#C# hỗ trợ đơn kế thừa cho tất cả các lớp đối tượng, tức là một lớp chỉ có thể dẫn xuất trựctiếp nhiều nhất là từ một lớp đối tượng khác. Lớp cơ sở nhất trong C# là lớpSystem.Objectclass MyDerivedClass : MyBaseClass{ // functions and data members here}Cũng như một số ngôn ngữ lập trình hướng đối tượng, C# có một số bổ từ truy cập để quyđịnh phạm vi mã lệnh được phép truy xuất một thành viên trong lớp đối tượng.Mức truy cập Mô tảpublic Biến hoặc phương thức có thể được truy xuất từ bất cứ nơi nàointernal Biến hoặc phương thức chỉ có thể truy xuất trong phạm vi cùng assemblyprotected Biến hoặc phương thức chỉ có thể truy xuất từ bên trong kiểu dữ liệu mà nó thuộc về, hoặc các kiểu dữ liệu dẫn xuấtprotected Biến hoặc phương thức có thể được truy xuất trong phạm vi assemblyinternal hiện tại, hoặc từ các kiểu dữ liệu dẫn xuất từ kiểu dữ liệu chứa nóprivate Biến hoặc phương thức chỉ có thể được truy xuất từ bên trong kiểu dữ liệu mà nó thuộc về3.2 Nạp chồng phương thức (Method Overloading)C# hỗ trợ nạp chồng phương thức, cho phép có nhiều phiên bản cho một phương thức cócác chữ ký khác nhau. Khái niệm chữ ký của phương thức ở đây được hiểu là tên phươngGiáo trình Visual Studio .NET 53thức, số lượng đối số, kiểu đối số được sử dụng trong phương thức. Chẳng hạn, lớp đối tượng Student dưới đây có hai phương thức nạp chồng Display():class Student{ // …… void Display(string stMessage) { // implementation } void Display() { // implementation }}3.3 Ghi đè phương thức và che dấu phương thứcBằng cách khai báo một hàm ở lớp cơ sở là virtual, chúng ta có thể ghi đè hàm đó ở lớpdẫn xuất của lớp này.class MyBaseClass{ public virtual string VirtualMethod() { return Phuong thuc nay la virtual trong MyBaseClass; }}Điều này có nghĩa là chúng ta có thể cài đặt lại phương thức VirtualMethod() (với cùngchữ ký phương thức) trong lớp dẫn xuất của MyBaseClass. Khi chúng ta gọi phương thứcnày từ một thể hiện của lớp dẫn xuất thì phương thức của lớp dẫn xuất sẽ được triệu gọichứ không phải là phương thức của lớp cơ sở.class MyDerivedClass: MyBaseClass{ public override string VirtualMethod() { return Phuong thuc nay duoc dinh nghia de` trong MyDerivedClass; }}Đoạn mã lệnh dưới đây minh họa hiệu ứng của việc ghi đè phương thức:MyBaseClass obj;Giáo trình Visual Studio .NET 54obj = new MyBaseClass();obj.VirtualMethod(); // in ra Phuong thuc nay là virtual trong MyBaseClassobj = new MyDerivedClass();obj.VirtualMethod(); // in ra Phuong thuc nay duoc dinh nghia de` trong // MyDerivedClassỞ đoạn mã lệnh trên, chúng ta thấy rằng, việc quyết định phiên bản nào của phương thứcVirtualMethod (ở lớp MyBaseClass hay MyDerivedClass) được sử dụng là tùy thuộc vàonội dung hiện tại của đối tượng mà obj tham chiếu đến. Nói cách khác, việc quyết địnhphiên bản phương thức để triệu gọi được quyết định trong thời gian thực thi chương trìnhchứ không phải là trong lúc biên dịch chương trình! Đặc tính này còn được gọi là tínhgắn kết muộn (late-binding) trong kỹ thuật lập trình. Trong lớp đối tượng, các trường dữ liệu hoặc các hàm tĩnh không được khai báo làvirtual. Nếu một phương thức với chữ ký được khai báo trong cả lớp cơ sở và lớp dẫn xuất,nhưng các phương thức không được khai báo tương ứng là virtual và override, thì phiênbản phương thức ở lớp dẫn xuất được gọi là đã che dấu phiên bản ở lớp cơ sở. Trong tìnhhuống này, phiên bản của phương thức được sử dụng để hoạt động sẽ tùy thuộc vào kiểudữ liệu của biến được sử dụng để tham chiếu đến đối tượng thể hiện chứ không phải làchính đối tượng thể hiện. Điều này được thể hiện trong cách thức hoạt động của đoạn mãlệnh dưới đây:class MyBaseClass{ public string VirtualMethod() // KHONG DUOC KHAI BAO LA virtual NUA!!! { return Phuong thuc nay la virtual trong MyBaseClass; }}class MyDerivedClass: MyBaseClass{ public string VirtualMethod() // KHONG DUOC KHAI BAO LA override NUA!!! { return Phuong thuc nay duoc d ...