Lập trình .NET và C#
Lecture 5: KẾ THỪA – ĐA HÌNH TS Đào Nam Anh UTM, Khoa KH&CN
1
Resources
(cid:1) Các giải pháp lập trình C#, Nguyễn Ngọc Bình Phương - Thái Thanh Phong (cid:1) Allen Jones. C# Programmer's Cookbook. Microsoft Press, 2004 (cid:1)
John Connell. Coding Techniques for Microsoft Visual Basic .NET. Microsoft Press, 2002.
(cid:1) Harvey M. Deitel, Paul J. Deitel, & Tem R. Nieto. Visual Basic .NET How to
(cid:1)
(cid:1)
Program, Second Edition. Prentice Hall, 2002. Jose Mojica. C# and VB .NET Conversion Pocket Reference. O'Reilly, 2002. James Avery. Ten Must-Have Tools Every Developer Should Download Now. MSDN Magazine, 2004.
(cid:1) Karl Moore. The Ultimate VB.NET and ASP.NET Code Book. Apress, 2003 (cid:1) Matthew MacDonald. Microsoft Visual Basic .NET Programmer's Cookbook.
Microsoft Press, 2003.
(cid:1) Mark Schmidt & Simon Robinson. Microsoft Visual C# .NET 2003 Developer's
Cookbook. Sams Publishing, 2003.
(cid:1) Dương Quang Thiện. Lập trình Visual C# thế nào? Nhà xuất bản Tổng Hợp TP.
Hồ Chí Minh, 2005.
(cid:1) Nguyễn Ngọc Bình Phương & Lê Trần Nhật Quỳnh. Các giải pháp lập trình
Visual Basic .NET. Nhà xuất bản Giao thông Vận tải, 2006
(cid:1) www.msdn.microsoft.com, www.codeproject.com, www.msd2d.com,
www.developersdex.com, www.windowsforms.net, www.gotdotnet.com, www.codeguru.com, www.developerfusion.com
2
Kế thừa
(cid:1) Quan hệ đặc biệt hóa và tổng quát hóa là hai mối quan hệ đối ngẫu và phân cấp với nhau. (cid:1) Chúng có quan hệ đối ngẫu vì đặc biệt được xem như là mặt ngược lại của tổng quát.
(cid:1) Loài ngựa và mèo là trường hợp đặc biệt của động vật có vú. Ngược lại động vật có vú là trường hợp tổng quát từ các loài ngựa và mèo.
3
Kế thừa
(cid:1) Khi hai lớp chia xẻ chức năng với nhau, thì
(cid:1) Điều này hết sức có lợi, vì nó cung cấp khả
chúng được trích ra các phần chung và đưa vào lớp cơ sở.
4
năng cao để sử dụng lại các mã nguồn chung và dễ dàng duy trì mã nguồn.
Kế thừa
5
Kế thừa
6
Kế thừa
(cid:1) để tạo một lớp dẫn xuất từ một lớp ta thêm dấu hai chấm vào sau tên lớp dẫn xuất và trước tên lớp cơ sở:
(cid:1) public class ListBox : Window
7
Kế thừa G(cid:2)i ph(cid:7)(cid:8)ng th(cid:12)c kh(cid:15)i d(cid:17)ng c(cid:18)a l(cid:21)p c(cid:8) s(cid:15)
(cid:1) một lớp mới tên là ListBox được dẫn xuất từ
8
lớp cơ sở Window, lớp ListBox có một phương thức khởi dựng lấy ba tham số. Trong phương thức khởi dựng của lớp dẫn xuất này có gọi phương thức khởi dựng của lớp cơ sở. Cách gọi được thực hiện bằng việc đặt dấu hai chấm ngay sau phần khai báo danh sách tham số và tham chiếu đến lớp cơ sở thông qua từ khóa base:
Kế thừa
(cid:1) lớp ListBox thực thi một phiên bản mới của
9
phương thức DrawWindow(): public new void DrawWindow() (cid:1) Từ khóa new được sử dụng ở đây để chỉ ra rằng người lập trình đang tạo ra một phiên bản mới cho phương thức này bên trong lớp dẫn xuất.
Kế thừa
private int top; private int left;
public Window( int top, int left) {
this.top = top; this.left = left;
}
public class Window {
10
}
Kế thừa
public ListBox (int top, int left, string theContents) :
base (top, left)
{
mListBoxContents = theContents;
}
public class ListBox: Window {
11
}
Kế thừa (cid:1) public cho phép một thành viên có thể được truy
cập bởi một phương thức thành viên của những lớp khác.
(cid:1) private chỉ cho phép các phương thức thành viên
trong lớp đó truy xuất.
(cid:1) protected mở rộng thêm khả năng của private cho
phép truy xuất từ các lớp dẫn xuất của lớp đó.
(cid:1) Internal mở rộng khả năng cho phép bất cứ
phương thức của lớp nào trong cùng một khối kết hợp (assembly) có thể truy xuất được.
(cid:1) internal protected cho phép các thành viên của
12
cùng một khối assembly hoặc các lớp dẫn xuất của nó có thể truy cập
Đa hình
(cid:1) tính đa hình (polymorphism). từ poly là nhiều
(cid:1) Do vậy, đa hình được hiểu như là khả năng sử dụng nhiều hình thức của một kiểu mà không cần phải quan tâm đến từng chi tiết.
13
và morph có nghĩa là form (hình thức).
Đa hình
(cid:1) khai báo khóa virtual trong phương thức của
(cid:1) Trong lớp mở rộng: thêm từ khóa override
lớp cơ sở.
14
để chồng lên phương thức
Đa hình new và override
(cid:1) quyết định phủ quyết một phương thức ảo bằng cách khai báo tường minh từ khóa override. Điều này giúp cho ta đưa ra một phiên bản mới của chương trình và sự thay đổi của lớp cơ sở sẽ không làm ảnh hưởng đến chương trình viết trong các lớp dẫn xuất.
15
Đa hình
public virtual void DrawWindow() {
}
Class Window {
16
}
Đa hình
public override void DrawWindow() {
base.DrawWindow(); ///
}
Class ListBox: Window {
17
}
Đa hình New
(cid:1) từ khóa new, và nó không phải phủ quyết của bất cứ phương thức ảo nào trong lớp Window:
public new virtual Sort( ) {….}
public class ListBox : Window {
18
}
Đa hình abstract
(cid:1) Một phương thức trừu tượng không có sự
thực thi. Phương thức này chỉ đơn giản tạo ra một tên phương thức và ký hiệu của phương thức, phương thức này sẽ được thực thi ở các lớp dẫn xuất.
abstract public void DrawWindow( );
Class Window {
19
}
Đa hình
public override void DrawWindow() {
base.DrawWindow(); ///
}
Class ListBox: Window {
20
}
Đa hình L(cid:21)p cô l(cid:31)p (sealed class)
(cid:1) Ngược với các lớp trừu tượng là các lớp cô lập. Không cho phép các lớp dẫn xuất từ nó. (cid:1) Dùng từ khóa sealed đặt trước khai báo của
(cid:1) Nhằm ngăn chặn các tai nạn do sự kế thừa
lớp không cho phép dẫn xuất.
21
gây ra.
Đa hình G"c c(cid:18)a t#t c$ các l(cid:21)p: L(cid:21)p Object
(cid:1) Tất cả các lớp của ngôn ngữ C# của bất cứ kiểu dữ
liệu nào thì cũng được dẫn xuất từ lớp System.Object. bao gồm cả các kiểu dữ liệu giá trị.
(cid:1) Equal( ) So sánh bằng nhau giữa hai đối tượng (cid:1) GetHashCode( ) Cho phép những đối tượng cung cấp riêng những hàm băm cho sử dụng tập hợp.
(cid:1) GetType( ) Cung cấp kiểu của đối tượng (cid:1) ToString( ) Cung cấp chuỗi thể hiện của đối tượng (cid:1) Finalize( ) Dọn dẹp các tài nguyên (cid:1) MemberwiseClone( ) Tạo một bản sao từ đối tượng.
22
Question
23