Chương II LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI C# Trình bày: ThS. LÊ THỊ HOÀNG YẾN Tháng 9/2016 2
NỘI DUNG
2.1 Lập trình hướng đối tượng với C#
2.2 Lớp và đối tượng
2.3 Thuộc tính và phương thức
2.4 Kế thừa (Inheritance)
2.2 Tính đa hình (Polimorphism)
Lập trình Windows - Lê Thị Hoàng Yến 3
2.1 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI C#
- C# cung cấp sự hỗ trợ đầy đủ cho lập trình hướng đối tượng bao gồm cả đóng gói (encapsulation), kế thừa (inheritance) và tính đa hình (polymorphism) + Đóng gói: có nghĩa là một nhóm các thuộc tính, phương thức và các thành phần khác có quan hệ với nhau được xử lý như một đơn vị hay một đối tượng duy nhất. + Kế thừa: mô tả khả năng tạo ra các lớp mới dựa trên lớp có sẵn + Tính đa hình: có nghĩa là có nhiều lớp có thể được sử dụng thay thế cho nhau mặc dù các lớp triển khai các thuộc tính và phương thức giống nhau theo nhiều cách khác nhau
Lập trình Windows - Lê Thị Hoàng Yến
4
2.2 LỚP VÀ ĐỐI TƯỢNG
2.2.1 Lớp và đối tượng - Ngôn ngữ lập trình C# là ngôn ngữ lập trình hướng đối tượng Chương trình được xây dựng bằng C# sẽ bao gồm một tập hợp các lớp (Class), các lớp chính là các thực thể của chương trình lớp đóng vai trò lớn trong các chương trình C# - Lớp là khuôn đúc ra các đối tượng cụ thể (instance) một đối tượng là một thể hiện cụ thể của một lớp Ví dụ: Sinhvien: lớp có tên là Sinhvien sinhvienA: là một thể hiện hay đối tượng cụ thể của lớp Sinhvien
Lập trình Windows - Lê Thị Hoàng Yến
5
2.2 LỚP VÀ ĐỐI TƯỢNG
2.2.2 Khai báo lớp - Lớp là một kiến trúc cho phép tạo ra các kiểu tùy chỉnh bằng cách gom nhóm các biến thuộc các kiểu dữ liệu khác nhau, phương thức và sự kiện - Mỗi lớp gồm nhiều thành phần khác nhau: + Thuộc tính định nghĩa dữ liệu của lớp + Phương thức mô tả hành vi của lớp + Sự kiện cung cấp cách thức giao tiếp giữa các lớp hoặc các đối tượng - Các thành phần có thể được khai báo với các chỉ dẫn truy cập: private, protected, internal, public
Lập trình Windows - Lê Thị Hoàng Yến
6
2.2 LỚP VÀ ĐỐI TƯỢNG
2.2.2 Khai báo lớp - Lớp được khai báo với từ khóa class. Cú pháp khai báo lớp: <chỉ dẫn truy cập> class <tên lớp> { // các thành phần của lớp } - Ví dụ: class Sinhvien // khai báo lớp có tên Sinhvien { private long mssv; public void InMSSV(){…} } Lập trình Windows - Lê Thị Hoàng Yến 7
2.2 LỚP VÀ ĐỐI TƯỢNG
2.2.2 Khai báo lớp - Khi đặt tên lớp cần tuân thủ các quy tắc sau đây : + Sử dụng danh từ để đặt tên cho lớp, phải dễ hiểu, có ý nghĩa, đơn giản + Không đặt tên lớp trùng với tên các từ khóa trong C#. + Tên lớp không được sử dụng lộn xộn giữa chữ hoa và chữ thường. Nên sử dụng chữ hoa cho ký tự đầu tiên + Không được sử dụng chữ số làm ký tự đầu tiên của tên lớp + Có thể sử dụng “@” hoặc dấu “_” cho ký tự đầu tiên, tuy nhiên không khuyến khích sử dụng theo cách này - Nếu lớp không được khai báo với từ khóa static phải khai báo đối tượng hoặc thể hiện cụ thể để truy xuất các thành phần thuộc lớp Lập trình Windows - Lê Thị Hoàng Yến 8
2.2 LỚP VÀ ĐỐI TƯỢNG
2.2.3 Tạo đối tượng - Sau khi tạo lớp cần khởi tạo đối tượng là thể hiện của lớp. Cú pháp khởi tạo đối tượng như sau: <tên lớp> <tên đối tượng> = new <tên lớp>(); - Ví dụ: + Sinhvien sinhvienA = new Sinhvien(); + Hanghoa mathangB = new Hanghoa();
Lập trình Windows - Lê Thị Hoàng Yến
9
2.2 LỚP VÀ ĐỐI TƯỢNG
2.2.3 Tạo đối tượng - Xét ví dụ: Customer object3 = new Customer(); Customer object4 = object3; Hai tham chiếu được tạo ra nhưng cùng chỉ đến một đối tượng. Khi có sự thay đổi được thực hiện thông qua object3 sẽ được phản ánh qua object4 ở các lần sử dụng tiếp theo - Bởi vì các đối tượng của lớp được gọi bằng cách tham chiếu nên lớp là kiểu dữ liệu tham chiếu
Lập trình Windows - Lê Thị Hoàng Yến
10
2.2 LỚP VÀ ĐỐI TƯỢNG
2.2.4 Ví dụ minh họa - Tất cả các lớp được dẫn xuất từ lớp cơ sở System.Object - Mỗi lớp thường được định nghĩa trong một file .cs và file này sẽ được thêm vào project - Cũng giống như các ngôn ngữ C++ và Java, C# cung cấp con trỏ this dùng để tham chiếu đến một thể hiện (instance) đang xét của lớp Lập trình Windows - Lê Thị Hoàng Yến 11
2.2 LỚP VÀ ĐỐI TƯỢNG
2.2.4 Ví dụ minh họa
Lập trình Windows - Lê Thị Hoàng Yến
12
2.2 LỚP VÀ ĐỐI TƯỢNG
2.2.5 Dữ liệu kiểu cấu trúc - C# cũng cung cấp một phiên bản nhẹ hơn class gọi là struct (structure) - struct trở nên hữu dụng khi chúng ta cần tạo ra một mảng lớn các đối tượng và không muốn tiêu tốn quá nhiều bộ nhớ - struct là kiểu dữ liệu giá trị, dùng để bao đóng một nhóm nhỏ các biến có liên quan. Ví dụ các chiều của một hình chữ nhật, các đặc trưng của một mục trong bảng kiểm kê. - Cú pháp khai báo struct: <chỉ dẫn truy cập> struct <tên cấu trúc> { // các thành phần của cấu trúc } Lập trình Windows - Lê Thị Hoàng Yến 13
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.1 Thuộc tính (Attributes) a/- Trường (Fields) - Một trường (field) là một biến có kiểu bất kỳ được khai báo trực tiếp trong một class hoặc một struct thành viên của kiểu chứa nó - Một class hay một struct có thể chứa các trường thực thể (instance fields) hoặc các trường tĩnh (static fields) hoặc cả hai - Nhìn chung, chỉ có thể truy cập các trường ở 2 chế độ private và protected - Việc truy xuất dữ liệu (fields) của class chỉ có thể thông qua methods, properties và indexers bảo vệ chống lại những giá trị input không hợp lệ
Lập trình Windows - Lê Thị Hoàng Yến
14
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.1 Thuộc tính (Attributes) a/- Trường (Fields) - Một trường với chỉ dẫn truy cập private được “phô bày” (expose) thông qua các properties có chỉ dẫn truy cập public backing store hay backing field - Các trường điển hình lưu trữ dữ liệu có thể truy xuất từ nhiều phương thức lớp và được lưu trữ lâu hơn “thời gian sống” của một phương thức đơn - Để truy xuất đến một trường của một đối tượng sử dụng cú pháp: <tên đối tượng>.<tên trường> Ví dụ: CalendarEntry birthday = new CalendarEntry(); birthday.day = "Saturday";
Lập trình Windows - Lê Thị Hoàng Yến
15
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.1 Thuộc tính (Attributes) b/- Properties - Properties là thành phần cung cấp cơ chế phức tạp cho việc đọc, ghi và tính toán giá trị của các trường private - Được truy xuất như các thành phần dữ liệu public nhưng thực tế là các phương thức đặc biệt giám định viên (accessor) Cho phép dữ liệu được truy xuất một cách dễ dàng và vẫn giúp thúc đẩy sự an toàn, phức tạp của các phương thức - Properties cho phép một lớp phơi bày cách thức nhận và thiết lập các giá trị, trong khi các mã thực thi và xác minh được giấu đi
Lập trình Windows - Lê Thị Hoàng Yến
16
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.1 Thuộc tính (Attributes) b/- Properties - Ví dụ: - Phương thức get dùng để trả về giá trị của property, phương thức set dùng để gán một giá trị mới
Lập trình Windows - Lê Thị Hoàng Yến
17
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.1 Phương thức (methods) - Một phương thức là một khối mã có chứa một loạt các lệnh - Chương trình sinh ra các lệnh được thực thi bằng cách gọi phương thức và chỉ định các đối số phương thức yêu cầu - Trong C# mỗi chỉ thị thực thi được thực hiện trong ngữ cảnh của một phương thức - Phương thức main là điểm vào của một ứng dụng C# và nó được gọi bởi CLR khi chương trình bắt đầu - Một phương thức có thể có hoặc không có giá trị trả về - Khái niệm chữ ký của phương thức được hiểu là tên phương thức, số lượng đối số, kiểu đối số được sử dụng trong phương thức Lập trình Windows - Lê Thị Hoàng Yến 18
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.1 Phương thức (methods) - Phương thức thực thi một hành động của đối tượng là thể hiện của lớp chứa phương thức đó. Đối tượng này có thể truy vấn tới phương thức nếu lớp chứa nó cho phép truy vấn - C# cung cấp 2 loại phương thức: non-static method và static method + non-static method: chỉ có thể được truy xuất thông qua đối tượng của lớp Mang tính đặc thù của đối tượng, từng đối tượng khác nhau sẽ trả về kết quả khác nhau + static method: phương thức đặc trưng cho tất cả các đối tượng của lớp. Không thể gọi từ đối tượng mà phải gọi trực tiếp từ lớp Kết quả không phụ thuộc vào đối tượng mà phụ thuộc vào tham số đầu vào của phương thức Lập trình Windows - Lê Thị Hoàng Yến 19
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.1 Phương thức (methods) a/- Khai báo phương thức - Cú pháp khai báo phương thức: <A> [B] <kiểu trả về><tên phương thức>([<danh sách các đối số>]) { // Lệnh trong thân phương thức } + A: chỉ dẫn truy xuất (public, internal, protected, private) + B: bổ từ tùy chọn (static, abstract, virtual…) - Lưu ý: cần thêm từ khóa static vào cú pháp trên để khai báo static method và chỉ dẫn truy xuất tương ứng bắt buộc phải là public Lập trình Windows - Lê Thị Hoàng Yến 20
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.1 Phương thức (methods) a/- Khai báo phương thức
Lập trình Windows - Lê Thị Hoàng Yến
21
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.1 Phương thức (methods) b/- Truy xuất phương thức - Để truy xuất phương thức của một lớp ta cần thông qua đối tượng của lớp đó: <tên đối tượng>.<tên phương thức>([<danh sách các đối số>]) - Để truy xuất phương thức tĩnh (static method) ta sử dụng cú pháp sau: <tên lớp>.<tên phương thức>([<danh sách các đối số>])
Lập trình Windows - Lê Thị Hoàng Yến
22
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.1 Phương thức (methods) b/- Truyền tham số cho phương thức - Có 2 cách truyền đối số trong C#: + Truyền tham trị + Truyền tham chiếu - Để thực hiện truyền đối số theo kiểu tham chiếu ta sử dụng từ khóa ref cho đối số đó trong cả khai báo hàm và truy xuất hàm
Lập trình Windows - Lê Thị Hoàng Yến
23
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.1 Phương thức (methods) b/- Truyền tham số cho phương thức - Ví dụ: truyền tham trị
Lập trình Windows - Lê Thị Hoàng Yến
24
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.1 Phương thức (methods) b/- Truyền tham số cho phương thức - Ví dụ: truyền tham chiếu
Lập trình Windows - Lê Thị Hoàng Yến
25
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.3 Phương thức khởi tạo và phương thức hủy a/- Phương thức khởi tạo (Constructors) - Là phương thức đặc biệt, được gọi khi tạo đối tượng là thể hiện của lớp - Chức năng: khởi tạo các giá trị của thành phần dữ liệu (bao gồm fields và properties) của đối tượng - Được định nghĩa khi xây dựng lớp, nếu ta không tạo ra thì CLR sẽ thay mặt chúng ta mà tạo phương thức khởi tạo một cách mặc định phương thức khởi tạo ngầm định do trình biên dịch cung cấp khi trong khai báo lớp không có định nghĩa phương thức khởi tạo
Lập trình Windows - Lê Thị Hoàng Yến
26
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.3 Phương thức khởi tạo và phương thức hủy a/- Phương thức khởi tạo (Constructors) - Phương thức khởi tạo được khai báo giống như phương thức bình thường của lớp tuy nhiên nó có đặc điểm: + Không có giá trị trả về. + Tên phương thức khởi tạo trùng với tên của lớp - Để tạo phương thức khởi tạo, lập trình viên cần tuân thủ cú pháp sau: <chỉ dẫn truy xuất><tên lớp>([<danh sách đối số>]) { // Lệnh trong thân phương thức khởi tạo } Lập trình Windows - Lê Thị Hoàng Yến 27
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.3 Phương thức khởi tạo và phương thức hủy a/- Phương thức khởi tạo (Constructors)
Lập trình Windows - Lê Thị Hoàng Yến
28
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.3 Phương thức khởi tạo và phương thức hủy b/- Phương thức hủy (Destructors) - Ngược lại với phương thức khởi tạo, phương thức hủy được gọi khi đối tượng tương ứng bị xóa khỏi bộ nhớ - Có cùng tên với tên lớp tuy nhiên phía trước có dấu “~”. - Đặc điểm của phương thức hủy như sau: + Không cho phép kế thừa và không cho phép nạp chồng + Không được gọi tường minh + Không có phạm vi truy cập và không có tham số truyền vào + Chỉ được dùng với class, không được định nghĩa trong struct
Lập trình Windows - Lê Thị Hoàng Yến
29
2.3 THUỘC TÍNH VÀ PHƯƠNG THỨC
2.3.3 Phương thức khởi tạo và phương thức hủy b/- Phương thức hủy (Destructors) - Cú pháp: ~ <tên lớp>(){//Các lệnh trong thân phương thức} - Khi làm việc với các đoạn mã không được quản lý thì cần phải khai báo tường minh các phương thức hủy để giải phóng các tài nguyên - C# cung cấp ngần định một phương thức để thực hiện điều khiển công việc này, phương thức đó là Finalize() hay còn gọi là bộ kết thúc - Phương thức Finalize này sẽ được gọi bởi cơ chế thu dọn khi đối tượng bị hủy và phương thức này được gọi trong nội dung thực hiện của phương thức hủy
Lập trình Windows - Lê Thị Hoàng Yến
30
2.4 KẾ THỪA (INHERITANCE)
2.4.1 Kế thừa trong lập trình hướng đối tượng - Kế thừa là khái niệm then chốt của các ngôn ngữ lập trình hướng đối tượng dùng để mô tả hiện tượng một lớp sử dụng lại một số thuộc tính (attribute) hoặc phương thức của một lớp khác - Lớp sử dụng các thuộc tính của lớp khác lớp dẫn xuất, lớp con - Lớp cho phép lớp khác sử dụng các thuộc tính và phương thức lớp cơ sở, lớp cha - Kế thừa trong hướng đối tượng được chia thành 2 loại: đơn kế thừa (single inheritance) và đa kế thừa (multiple inheritance) - C++ hỗ trợ cả 2 dạng trên, C# chỉ hỗ trợ đơn kế thừa
Lập trình Windows - Lê Thị Hoàng Yến
31
2.4 KẾ THỪA (INHERITANCE)
2.4.2 Đơ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ực tiế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ớp System.Object - Cú pháp khai báo kế thừa: class <tên lớp dẫn xuất>: <tên lớp cơ sở> { // các thành phần của lớp dẫn xuất }
Lập trình Windows - Lê Thị Hoàng Yến
32
2.4 KẾ THỪA (INHERITANCE)
2.4.2 Đơn kế thừa trong C#
Lập trình Windows - Lê Thị Hoàng Yến
33
2.4 KẾ THỪA (INHERITANCE)
2.4.2 Đơn kế thừa trong C# - Ví dụ: Xây dựng lớp cơ sở Cat gồm: + 2 thuộc tính: Name và Weight + 2 phương thức: Speak() và DrinkWater()
Lập trình Windows - Lê Thị Hoàng Yến
34
2.4 KẾ THỪA (INHERITANCE)
2.4.2 Đơn kế thừa trong C# - Ví dụ: 2 lớp dẫn xuất Balinese và Birman kế thừa từ lớp cơ sở Cat
Lập trình Windows - Lê Thị Hoàng Yến
35
2.4 KẾ THỪA (INHERITANCE)
2.4.2 Đơn kế thừa trong C# - Trong một ứng dụng, việc tận dụng tính năng kế thừa của hướng đối tượng làm cho chương trình trở nên ngắn gọn, dễ hiểu - Trong tình huống chương trình có chứa nhiều lớp tương tự nhau trong đó có rất nhiều thành phần (thuộc tính, phương thức) giống nhau thì việc xây dựng một lớp cơ sở chứa các thành phần chung làm cho việc cập nhật, chỉnh sửa được thuận lợi hơn
Lập trình Windows - Lê Thị Hoàng Yến
36
2.4 KẾ THỪA (INHERITANCE)
2.4.3 Phương thức ảo (virtual method) và phương thức trừu tượng (abstract method) - Khi lớp cơ sở khai báo một phương thức ảo lớp dẫn xuất có thể ghi đè (overriding) phương thức với những xử lý của chính nó - Nếu lớp cơ sở định nghĩa một thành viên trừu tượng, phương thức đó phải được ghi đè trong bất kỳ lớp dẫn xuất kế thừa trực tiếp từ lớp cơ sở và lớp dẫn xuất không được khai báo trừu tượng - Nếu lớp dẫn xuất là lớp trừu tượng không thực thi các thành phần trừu tượng kế thừa - Thành phần trừu tượng và thành phần ảo là nền tảng của tính đa hình của lập trình hướng đối tượng Lập trình Windows - Lê Thị Hoàng Yến 37
2.4 KẾ THỪA (INHERITANCE)
2.4.4 Lớp cơ sở trừu tượng (abstract base classes) - Có thể khai báo một lớp trừu tượng nếu muốn ngăn chặn việc thuyết minh (instantiation) trực tiếp với từ khóa new - Khi khai báo lớp cơ sở trừu tượng, lớp chỉ có thể được sử dụng khi có một lớp được dẫn xuất từ nó - Trong một lớp trừu tượng, chỉ có thể được khai báo trường dữ liệu thành phần và các chữ ký của phương thức (không có phần cài đặt) Ví dụ: abstract class SinhVien { private bool damaged = false; // field public abstract decimal DiemTrungBinh(); // abstract method } Lập trình Windows - Lê Thị Hoàng Yến 38
2.4 KẾ THỪA (INHERITANCE)
2.4.4 Lớp cơ sở trừu tượng (abstract base classes) - Một lớp trừu tượng không cần có các thành phần trừu tượng - Nếu một lớp có chứa thành phần trừu tượng bắt buộc nó phải được khai báo trừu tượng - Các lớp dẫn xuất không được khai báo dưới dạng trừu tượng phải cung cấp sự thực thi cho bất kỳ phương thức trừu tượng nào thuộc lớp cơ sở trừu tượng
Lập trình Windows - Lê Thị Hoàng Yến
39
2.4 KẾ THỪA (INHERITANCE)
2.4.5 Lớp dẫn xuất truy xuất thành phần của lớp cơ sở - Một lớp dẫn xuất không thể truy xuất các thành phần private của lớp cơ sở - Tuy nhiên, các thành phần private vẫn hiện diện trong lớp dẫn xuất và có thể làm những việc chúng đã làm trong chính lớp cơ sở - Khi một phương thức được ghi đè trong lớp dẫn xuất, việc triệu gọi phương thức thực thi sẽ được thực hiện trên phiên bản của lớp dẫn xuất. C# có một cú pháp đặc biệt để cho phép trong lớp dẫn xuất có thể triệu gọi phương thức với phiên bản được cài đặt ở lớp cơ sở: base.<MethodName>()
Lập trình Windows - Lê Thị Hoàng Yến
40
2.4 KẾ THỪA (INHERITANCE)
2.4.5 Lớp dẫn xuất truy xuất thành phần của lớp cơ sở - Ví dụ:
Lập trình Windows - Lê Thị Hoàng Yến
41
2.5 TÍNH ĐA HÌNH (POLIMORPHISM)
- Ghi đè (Overriding) và nạp chồng (overloading) là hai kỹ thuật tạo nên tính đa hình trong lập trình hướng đối tượng - Trong lập trình cấu trúc C, chúng ta không thể nào khai báo các function (method) trùng tên, nhưng trong OOP chỉ cần áp dụng hai kỹ thuật này, chúng ta hoàn toàn có thể làm được điều đó
Lập trình Windows - Lê Thị Hoàng Yến
42
2.5 TÍNH ĐA HÌNH (POLIMORPHISM)
2.5.1 Ghi đè phương thức (Method overriding) - Khi sử dụng overriding thay đổi hành vi của method mà nó override - Nói đơn giản là nó đã ghi đè nội dung lên method bị ghi đè. Method ghi đè phải được khai báo giống hệt method bị ghi đè cả đối số và kiểu trả về - Overriding thường được sử dụng trong method ở lớp con - Bằ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ớp dẫn xuất của lớp này - Điều này có nghĩa là có thể cài đặt lại phương thức VirtualMethod() (với cùng chữ ký phương thức) trong lớp dẫn xuất của MyBaseClass. - Khi gọi phương thức này từ một thể hiện của lớp dẫn xuất phương thức của lớp dẫn xuất sẽ được triệu gọi, không phải là phương thức của lớp cơ sở Lập trình Windows - Lê Thị Hoàng Yến 43
2.5 TÍNH ĐA HÌNH (POLIMORPHISM)
2.5.1 Ghi đè phương thức (Method overriding) - Ví dụ:
Lập trình Windows - Lê Thị Hoàng Yến
44
2.5 TÍNH ĐA HÌNH (POLIMORPHISM)
2.5.1 Ghi đè phương thức (Method overriding) Che giấu phương thức - 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 phiên bản phương thức ở lớp dẫn xuất được gọi là đã che giấu phiên bản ở lớp cơ sở - Phiên bản của phương thức sẽ tùy thuộc vào kiểu dữ liệu của biến được sử dụng để tham chiếu đến đối tượng chứ không phải là chính đối tượng - Khi biên dịch, trình biên dịch sẽ đưa ra cảnh báo về việc phương thức bị che giấu thêm từ khóa new khi khai báo phương thức được định nghĩa lại trong lớp dẫn xuất Lập trình Windows - Lê Thị Hoàng Yến 45
2.5 TÍNH ĐA HÌNH (POLIMORPHISM)
2.5.2 Nạp chồng phương thức (Method overloading) - Overloading đơn giản chỉ để tạo ra các method cùng tên trong cùng một Class. Nhưng các method đó phải khác nhau về đối số đầu vào (argument) hoặc kiểu trả về - Các method với kỹ thuật này không ghi đè mà cùng tồn tại song song - 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
Lập trình Windows - Lê Thị Hoàng Yến
46
2.5 TÍNH ĐA HÌNH (POLIMORPHISM)
2.5.2 Nạp chồng phương thức (Method overloading) - Ví dụ: class Students { //… public void Display(string stMessage) { // thực thi phương thức } public void Display() { //thực thi phương thức } //… } Lớp Students có 2 phương thức nạp chồng Display
Lập trình Windows - Lê Thị Hoàng Yến
47
2.5 TÍNH ĐA HÌNH (POLIMORPHISM)
2.5.2 Nạp chồng toán tử (Operator overloading) - Định nghĩa lại một số toán tử mà toán tử này làm việc với dữ liệu là đối tượng thuộc lớp đang xây dựng - C# cung cấp cơ chế nạp chồng toán tử, cho phép cài đặt mã lệnh để quyết định cách thức một lớp đối tượng làm việc với toán tử thông thường - Cú pháp để nạp chồng một toán tử là như sau: public static <kiểu trả về> operator <toán tử> ([<danh sách đối số>]) { //cài đặt mã lệnh }