You are on page 1of 48

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT VĨNH LONG

KHOA CÔNG NGHỆ THÔNG TIN

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
}

Lập trình Windows - Lê Thị Hoàng Yến


48

2.5 TÍNH ĐA HÌNH (POLIMORPHISM)


2.5.2 Nạp chồng toán tử (Operator overloading)
- Ví dụ:
public static Complex operator +(Complex c1, Complex c2)
{
Return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);
}

Lập trình Windows - Lê Thị Hoàng Yến

You might also like