bài 4 - classes, objects và namespaces - nền tảng lập trình ứng dụng với c#
DESCRIPTION
Tổng quan vềlập trình hướng đối tượng Xây dựng class trong C# NamespacesTRANSCRIPT
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
1
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 4: Classes, objects và namespaces
• Tổng quan về lập trình hướng đối tượng• Xây dựng class trong C#• NamespacesNamespaces
2
- 12 tiết -
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Tổng quan về lập trình hướng đối tượng
• Khái niệm• Các đặc trưng cơ bản
3
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khái niệm
• Khái niệmLậ t ì h h ớ đối t (OOP) là ột h há− Lập trình hướng đối tượng (OOP) là một phương pháp thiết kế và phát triển phần mềm dựa trên kiến trúc lớp (class) và đối tượng (object).
− OOP là cách lập trình nhằm hướng các xử lý đến từng đối tượng, mỗi đối tượng sẽ có các xử lý của riêng nó
4
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khái niệmố ể ế• Đối tượng (object) là một thực thể trong thực tế
− Con người• Nhân viên Trần Anh Tuấn• Nhân viên Trần Anh Tuấn• Sinh viên Lê Bảo Huy
− Đồ vật• Bàn B01• Phòng học E304
Chứng từ− Chứng từ• Hóa đơn HD200606-S21• Đơn đặt hàng DH200605-K01
5
− …
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khái niệm
• Các thông tin về đối tượng:− Ví dụ: Đối tượng Xe Ô tôg
• Mã số xe• Hiệu xe• Màu sơn• Hãng sản xuất• Nă ả ất• Năm sản xuất• …
6
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khái niệm• Tiếp cận hướng đối tượng− Là kỹ thuật cho phép biểu diễn tự nhiên các đối tượng
t th tế ới á đối t bê t h t ì htrong thực tế với các đối tượng bên trong chương trình
Đối tượng trong thực tế
Đối tượng trong chương
7
trong chương trình
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khái niệmế ố• Tiếp cận hướng đối tượng
− “Nhân cách hóa” đối tượng
Hệ thống thực tế Thực hiện nghiệp vụ f liên quan đối tượng x
Hệ thống tin học Đối tượng x với khả năng th hiệ hiệ f
8
thực hiện nghiệp vụ f
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khái niệm• Tiếp cận hướng đối tượng• Tiếp cận hướng đối tượng
Ví dụ 1:
Giải h t ì h bậ h i P− Giải phương trình bậc hai P
ax2 + bx + c = 0
Đối tượng P với hàm giải phương trìnhĐối tượng P với hàm giải phương trình− Thông tin về đối tượng P
• Các hệ số a, b, c
9
Các hệ số a, b, c• (Biến số x, Tên phương trình P)
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khái niệm• Tiếp cận hướng đối tượng• Tiếp cận hướng đối tượng
Ví dụ 2:
ề− Tính tiền lương của nhân viên Nv• Họ tên, Giới tính, Ngày vào làm, Hệ số lương, Số con
Đối tượng Nv với hàm Tính tiền lương− Thông tin về đối tượng Nv
10
Thông tin về đối tượng Nv• Họ tên, Giới tính, Ngày vào làm, Hệ số lương, Số con
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khái niệm• Lớp đối tượng (Class)• Lớp đối tượng (Class)− Class là một khái niệm trong Lập trình hướng đối tượng
mô tả cho những thực thể có chung tính chất và hànhmô tả cho những thực thể có chung tính chất và hành vi. Class định nghĩa những thuộc tính và hành vi được dùng cho những đối tượng của lớp đó
ế Ừ Á− Kết quả của sự TRỪU TƯỢNG HOÁ (Abstraction) các đối tượng:• Cùng loạiCùng loại• Cùng các thông tin mô tả về đối tượng
11
Lớp đối tượng
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Lớp: XE OTOp _
12
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khái niệm• Cá thà h hầ ủ lớ• Các thành phần của lớp
13
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khái niệm• Cá thà h hầ ủ lớ• Các thành phần của lớp− Biến thành viên (Field)
ề ố• Lưu trữ các thông tin mô tả về đối tượng.• Ví dụ: Lưu trữ thông tin về nhân viên
– Mã nhân viênMã nhân viên– Họ nhân viên– Tên nhân viên
N à i h– Ngày sinh– Ngày vào làm– Hệ số lương
14
– Số con– …
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khái niệm• Các thành phần của lớp• Các thành phần của lớp− Thuộc tính và Phương thức
ù ể ậ ậ í á ấ à ử ý ô• Dùng để cập nhật, tính toán, cung cấp và xử lý thông tin của đối tượng
15
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khái niệm• Cá thà h hầ ủ lớ• Các thành phần của lớp− Thuộc tính và Phương thức
• Ví dụ:Thuộc tính
– He so luong: Cập nhật/cung cấp thông tin về hệ sốHe_so_luong: Cập nhật/cung cấp thông tin về hệ số lương của nhân viên
– Tham_nien: Cung cấp thông tin về thâm niên của nhân viênviên
Phương thức– Tien_luong: Tính tiền lương cho nhân viên
16
– Tro_cap: Tính trợ cấp cho nhân viên– Tien_thuong: Tính tiền thưởng cho nhân viên
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khái niệmầ• Các thành phần của lớp
− Sự kiện• Gởi thông báo của đối tượng ra bên ngoài
17
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
XE OTO
Khái niệm
IDHieu xe
XE_OTO
Thuộc tính
• Ví dụ Lớp XE_OTO
_Hang_san_xuatMau_son
Thuộc tính
Nam_san_xuatNo_mayVao soVao_soThangTat may
Phương thức
18
_ ySap_het_xangSự kiện
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
NHAN_VIENKhái niệm
Ma_nhan_vienHo_nhan_vienT h iThuộc tính
• Ví dụ Lớp NHAN_VIEN
Ten_nhan_vienNgay_sinhNgay vao lam
Thuộc tính
Ngay_vao_lamHe_so_luongSo_conTien_luongTro_capTi th
Phương thức
19
Tien_thuongTang_luongSự kiện
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Tổng quan về lập trình hướng đối tượng
• Khái niệm• Các đặc trưng cơ bản
20
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các đặc trưng cơ bản
• Tính trừu tượng (Abstraction)• Tính trừu tượng (Abstraction)• Tính đóng gói (Encapsulation) • Tính kế thừa (Inheritance)
21
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các đặc trưng cơ bản• Tí h t ừ t (Ab t ti )• Tính trừu tượng (Abstraction)− Lớp (Class) là một khái niệm trừu tượng
ế ế• Ví dụ: 1 bản thiết kế (bản vẽ) xe hơi Lớp Xe hơi
− Đối tượng (Object) là một thể hiện cụ thể của lớp ế ấ ở ả ẩ ể• Ví dụ: 1 chiếc xe hơi được xuất xưởng là 1 sản phẩm cụ thể
được tạo ra từ bản thiết kế gốc Đối tượng Xe hơi
Từ những đối tượng giống nhau, ta có thể trừu tượng hoá thành 1 lớlớp
22
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các đặc trưng cơ bản• Tí h đó ói (E l ti )• Tính đóng gói (Encapsulation)− Mỗi lớp được xây dựng để thực hiện một nhóm
chức năng đặc trưng của riêng lớp đóchức năng đặc trưng của riêng lớp đó• Ví dụ:
– Muốc thực hiện các hàm toán học lớp Math– Muốn xử lý chuỗi lớp String
23
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các đặc trưng cơ bản • Tí h kế thừ (I h it )• Tính kế thừa (Inheritance)− Tính chất này cho phép xây dựng những lớp mới
dựa trên những lớp sẵn có (lớp Con kế thừa lớpdựa trên những lớp sẵn có (lớp Con kế thừa lớp Cha)
− Lớp Con có khả năng bổ sung, mở rộng những tính p g g, ộ g gnăng mới dựa trên những phần sẵn có ở lớp Cha• Ví dụ:
Các loại xe đời mới ngày càng hiện đại hơn và có– Các loại xe đời mới ngày càng hiện đại hơn và có nhiều chức năng tiện dụng hơn những loại xe đời cũ
24
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 4: Classes, objects và namespaces
• Tổng quan về lập trình hướng đối tượng• Xây dựng class trong C#• NamespacesNamespaces
25
- 12 tiết -
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Xây dựng class trong C#
• Khái niệm• Khai báo class• Tạo đối tượng có kiểu class• Xây dựng các thành phần trong class
26
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khái niệm
• Một class là kết quả của sự trừu tượng hóa đại diện chung cho dữ liệu và các hành vi của mộtdiện chung cho dữ liệu và các hành vi của một thực thể hay một tập các đối tượng
• Các classes còn mang ý nghĩa là một kiểu dữCác classes còn mang ý nghĩa là một kiểu dữ liệu và là các khối xây dựng cơ sở của các trình ứng dụng hướng đối tượng
27
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Xây dựng class trong C#
• Khái niệm• Khai báo class• Tạo đối tượng có kiểu class• Xây dựng các thành phần trong class
28
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo class trong C#• Cú há• Cú pháp
<từ khóa khai báo phạm vi> class <tên_lớp>{
// khai báo các sự kiện (Events)ế// khai báo các biến thành viên (Fields)
// khai báo các thuộc tính (Properties)// kh i bá á h thứ (M th d )// khai báo các phương thức (Methods)// ...
}
29
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo class trong C#• Ý hĩ• Ý nghĩa:− Từ khóa khai báo phạm vi: xác định phạm vi hoạt động
của class Nếu không chỉ ra từ khóa khai báo phạm vicủa class. Nếu không chỉ ra từ khóa khai báo phạm vi thì class sẽ có phạm vi hoạt động là private (cục bộ).
− Các từ khóa khai báo phạm vi thường dùng khi khai báo p ạ g gclass:• Private• Protected• Public• Static
30
Static
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo class trong C#• Cách tạo file class− Tạo thư mục chứa các class
− Click phải vào thư mục Chọn Add \ Add Class
− Đặt tên cho tập tin (*.cs)
31
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Khai báo class trong C#• Ví dụ: tạo một class có tên là Nhan_vien
32
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Xây dựng class trong C#
• Khái niệm• Khai báo class• Tạo đối tượng có kiểu class• Xây dựng các thành phần trong class
33
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Tạo đối tượng có kiểu class• Một class định nghĩa một kiểu của đối tượng.
Một đối tượng là một thực thể cụ thể trên cơ sở của một class và nó đôi khi còn được gọisở của một class, và nó đôi khi còn được gọi là một thể hiện (instance) của một class.
• Các đối tượng có thể được tạo bằng cách sử• Các đối tượng có thể được tạo bằng cách sử dụng từ khóa new theo sau đó là tên của class mà đối tượng dựa vào đó để khai báo: <Tên class> tên_đối tượng = new <Tên class>();
34
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Tạo đối tượng có kiểu class• Ví dụ: khai báo một đối tượng có tên nv1 có
kiểu class Nhan_vien Nhan_vien nv1 = new Nhan_vien();
• Có thể tạo một đối tượng tham chiếu mà không khởi tạo new nó như sau : <Tên class> tên_đối tượng;
− Ví dụ:
35
Nhan_vien nv1;
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Tạo đối tượng có kiểu class• Khi một instance của một class được tạo, một
tham chiếu tới đối tượng sẽ được thiết lập. (Trong ví dụ trên nv1 là một tham chiếu tới(Trong ví dụ trên, nv1 là một tham chiếu tới một đối tượng mới dựa trên class Nhan_vien)
• Nếu bạn thực hiện các khai báo sau đây:• Nếu bạn thực hiện các khai báo sau đây: Nhan_vien nv1 = new Nhan_vien() ;
Nh i 2Nhan_vien nv2;
nv2 = nv1;
ế ế ố
36
=> nv2 sẽ tham chiếu đến cùng đối tượng trên vùng nhớ heap giống như nv1
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Xây dựng class trong C#
• Khái niệm• Khai báo class• Tạo đối tượng có kiểu class• Xây dựng các thành phần trong class
37
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Xây dựng các thành phần trong class
• Biến thành viên (Field)• Thuộc tính (Property)• Các phương thức (Method)• Nạp chồng toán tử (Operator Overloading)• Delegate trong C#• Delegate trong C#• Sự kiện (Event)
38
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Biến thành viên (Field)• Khái niệm:− Biến thành viên là các trường dữ liệu lưu trữ dữ liệu của
ột l ó ũ hí h là á thà h iê dữ liệ ủmột class, nó cũng chính là các thành viên dữ liệu của class.
− Các trường dữ liệu của class được khai báo bên trongCác trường dữ liệu của class được khai báo bên trong khối class với việc chỉ định cấp độ truy xuất của trường dữ liệu (public/private)
ế− Khi khai báo nếu không chỉ ra phạm vi là private hay public thì mặc định được hiểu là private
39
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Biến thành viên (Field)• Khai báo:
− Cú pháp:
l Tê lớclass <Tên lớp>{ // ……
// Khai báo biến thành viên// Khai báo biến thành viên[private | public] Kieu_du_lieu Bien_thanh_vien_1;
[private | public] Kieu_du_lieu Bien_thanh_vien_2;
……
[private | public] Kieu_du_lieu Bien_thanh_vien_N;
40
// Tiếp tục cho những khai báo khác}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Biến thành viên (Field)
[private | public] Kiểu_dữ_liệu Biến_thành_viên;
• Từ khóa privateTừ khóa private
41
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Biến thành viên (Field)
[private | public] Kiểu_dữ_liệu Biến_thành_viên;
• Từ khóa publicTừ khóa public
42
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Ví dụclass NHAN_VIEN{ // ……
// Khai báo biến thành viênprivate string mHo nhan vien;private string mHo_nhan_vien;private string mTen_nhan_vien;private DateTime mNgay_sinh;private bool mGioi_tinh;private double mHe_so_luong;//// ……// Tiếp tục cho những khai báo khác//……
43
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Biến thành viên (Field)• Lưu ý:− Đối với các biến thành viên được khai báo public có thể
đ t ất bằ á h thê dấ hấ têđược truy xuất bằng cách thêm dấu chấm ngay sau tên của đối tượng, kế tiếp đó là tên của trường dữ liệu.
− Ví dụ:Ví dụ:
44
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Xây dựng các thành phần trong class
• Biến thành viên (Field)• Thuộc tính (Property)• Các phương thức (Method)• Nạp chồng toán tử (Operator Overloading)• Delegate trong C#• Delegate trong C#• Sự kiện (Event)
45
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Thuộc tính (Property)• Khái niệm:− Thuộc tính (Property) là thành phần được sử dụng để
t ất đế á biế thà h iê (Fi ld) đ kh i bátruy xuất đến các biến thành viên (Field) được khai báo private bên trong class
− Mỗi thuộc tính chỉ truy xuất đến một biến thành viên duyMỗi thuộc tính chỉ truy xuất đến một biến thành viên duy nhất
46
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Thuộc tính (Property)• Kh i bá• Khai báo:
− Cú pháp:class <Tên lớp>class <Tên lớp>{ // Khai báo thuộc tính
[private | public] Kieu_du_lieu_X Ten_thuoc_tinh{
get { return Tên_biến_thành_viên;}set { Tên biến thành viên = value;}set { Tên_biến_thành_viên = value;}
}
47
// Tiếp tục cho những khai báo khác}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Ví dụclass NHAN_VIEN_{
single mHe_so_luong;
Ho_nhan_vienTen nhan vien
// Khai báo các thuộc tính
public double He_so_luong
NHAN_VIEN
Ten_nhan_vienNgay_sinhHe_so_luong
{get {return mHe_so_luong;}set {mHe so luong = value;} _ _ g
Ngay_vao_lamSo_con
set {mHe_so_luong value;}}// Tiếp tục cho những khai báo khác
48
//……
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Thuộc tính (Property)• Kiể t tí h h lệ ủ dữ liệ• Kiểm tra tính hợp lệ của dữ liệu
// Khai báo các thuộc tính
public double He_so_luong{
t { t H l }get { return mHe_so_luong; }set {
if (value >=1)if (value 1) mHe_so_luong = value;
}
49
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Xây dựng các thành phần trong class
• Biến thành viên (Field)• Thuộc tính (Property)• Các phương thức (Method)• Nạp chồng toán tử (Operator Overloading)• Delegate trong C#• Delegate trong C#• Sự kiện (Event)
50
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức khởi tạo (Constructor):− Constructor là một phương thức đặc biệt có cùng tên
ới tê ủ l hứ óvới tên của class chứa nó.
− Constructor có vai trò khởi tạo các thành viên dữ liệu của đối tượng mớicủa đối tượng mới.
− Ngoài việc cùng tên với class, Constructor còn có điểm đặc biệt nữa so với các phương thức khác là nó được
ố ằtriệu gọi ngay sau khi khởi tạo đối tượng bằng lệnh new và tương ứng với mỗi đối tượng, nó chỉ được gọi một lần duy nhất.
51
y
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức khởi tạo không có tham số:− Được dùng cho việc khởi tạo các giá trị mặc định cho
dữ liệ ủ ldữ liệu của class.
− Khi khởi tạo đối tượng không phải truyền tham số lúc triệu gọitriệu gọi
− Xét ví dụ lớp nhan_vien với khai báo như sau:
52
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức khởi tạo không có tham số:− Ví dụ:
53
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức khởi tạo không có tham số:− Và đoạn lệnh khởi tạo đối tượng như sau:
54
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức khởi tạo không có tham số:− Kết quả xuất ra màn hình:
55
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức khởi tạo có tham số:− Cho phép định nghĩa nhiều constructor trong một class.
56
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức khởi tạo có tham số:− Lúc đó đoạn lệnh khởi tạo đối tượng như sau:
57
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức khởi tạo không có tham số:− Kết quả xuất ra màn hình:
58
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức khởi tạo với khai báo private :− Một private constructor là một thể hiện constructor cụ
thể Nó th ờ đ dù t á l hỉ hứthể . Nó thường được dùng trong các class chỉ chứa các thành viên tĩnh (các thành viên có khai báo từ khóa static).
− Nếu một class có một hay nhiều private constructor và không khai báo từ khóa public, thì các class khác (ngoại trừ các class được lồng) sẽ không được phép tạo cáctrừ các class được lồng) sẽ không được phép tạo các thể hiện (instances) của class này.
59
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức khởi tạo với khai báo private :− Ví dụ: xét class Counter như sau:
60
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức khởi tạo với khai báo private :− Lúc đó đoạn lệnh gọi thực hiện như sau:
− Dòng lệnh 18: gán giá trị 100 cho thành viên dữ liệu currentCount, Buộc phải truy xuất đến thành viên dữ liệ à thô tê l hứ ó
61
liệu này thông qua tên class chứa nó.
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức khởi tạo với khai báo static :− static constructor thường được dùng để khởi tạo dữ liệu
t ti bất kỳ h ặ để th hiệ ột hà h độ iêstatic bất kỳ, hoặc để thực hiện một hành động riêng biệt mà hành động này chỉ cần thiết thực thi một lần.
− static constructor được gọi một cách tự động trước khistatic constructor được gọi một cách tự động trước khi instance đầu tiên được tạo hoặc bất kỳ thành viên static nào đó được tham chiếu tới.
62
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức khởi tạo với khai báo static :− Ví dụ: xét class Buss với constructor static như sau:
63
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức khởi tạo với khai báo static :− Xét đoạn lệnh sử dụng class như sau:
− Kết quả xuất ra màn hình:
64
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Các đặc tính của static constructor:− static constructor không được phép có tham số
− static constructor được triệu gọi một cách tự động để khởi tạo một class trước khi instance đầu tiên được tạo hay các thành viên static bất kỳ được tham chiếu tớihay các thành viên static bất kỳ được tham chiếu tới.
− static constructor không thể được triệu gọi trực tiếp.
− Người dùng không thể can thiệp vào khi static− Người dùng không thể can thiệp vào khi static constructor được thực thi trong chương trình.
65
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Tạo một Copy Constructor:− Trong C# không cung cấp một copy constructor. Tuy
hiê ó thể â d ột h thứ thí h h đểnhiên có thể xây dựng một phương thức thích hợp để sao chép các giá trị từ một đối tượng đang tồn tại.
− Xét lớp nhan vien với khai báo copy constructor nhưXét lớp nhan_vien với khai báo copy constructor như trong ví dụ sau:
66
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
67
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Tạo một Copy Constructor:− Dòng lệnh 9 13 : tạo constructor có tham số có kiểu
ũ hí h là kiể l hứ ó C t t à ócũng chính là kiểu class chứa nó. Constructor này có nhiệm vụ thực hiện việc sao chép dữ liệu tương ứng từ tham số vào các thành viên dữ liệu của class.
− Dòng lệnh 15 19 : tạo constructor thể hiện (instance constructor). Constructor này có hai tham số tương ứng với hai thành viên dữ liệu của class Từ khóa this đượcvới hai thành viên dữ liệu của class. Từ khóa this được sử dụng nhằm ám chỉ đến instance hiện hành của class.
68
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức hủy (Destructor):− Destructor thường được dùng để hủy instance của các
lclass.
− Để khai báo Destructor sử dụng ký hiệu ~ theo cú pháp sau:sau:
class Car{
~ Car() // destructor{
// Các câu lệnh mang tính dọn dẹp
69
ệ g ọ ẹp}
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức hủy (Destructor):• Phương thức hủy (Destructor):− Destructor ngầm định gọi Finalize trên class cơ sở của
đối tượng. Vì vậy, mã lệnh destructor ở trên sẽ ngầmđối tượng. Vì vậy, mã lệnh destructor ở trên sẽ ngầm chuyển đổi tới phương thức Finalize sau đây :
protected override void Finalize(){{
try {// Các câu lệnh mang tính dọn dẹp ...
}finally {
base Finalize();
70
base.Finalize(); }
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức hủy (Destructor):• Phương thức hủy (Destructor):− Với phương cách này phương thức finalize được gọi đệ
qui cho tất cả các instance trong một loạt đối tượng kếqui cho tất cả các instance trong một loạt đối tượng kế thừa.
− Ví dụ:
class K{
K( ) { }
class K{
K( ) { }K( ) { }~K( ) { }
}void Finalize() {base.Finalize( );}
71
}}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Các chú ý sau khi làm việc với destructor :• Các chú ý sau khi làm việc với destructor :− Các destructor không thể được định nghĩa trong các
struct Chúng chỉ được sử dụng với các classstruct. Chúng chỉ được sử dụng với các class.
− Một class chỉ có thể có duy nhất một destructor.
− Các destructor không thể được kế thừa hay được táiCác destructor không thể được kế thừa hay được tái định nghĩa (hay gọi là nạp chồng - overloaded).
− Các destructor không thể triệu gọi. Chúng được triệu gọi g ệ gọ g ợ ệ gọmột cách tự động.
− Một destructor không cho phép có bất kỳ sửa đổi nào thông qua nó và nó cũng không có các tham số
72
thông qua nó và nó cũng không có các tham số.
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Các chú ý sau khi làm việc với destructor :• Các chú ý sau khi làm việc với destructor :− Không nên sử dụng destructor rỗng, điều này dẫn đến
việc mất hiệu suất thực thi một cách không cần thiếtviệc mất hiệu suất thực thi một cách không cần thiết.
− Sử dụng phương thức Finalize() để giải phóng nguồn tài nguyên là cách làm không tường minh. Thay vào đó,
ồbạn nên chọn cách giải phóng các nguồn tài nguyên trong class bằng cách kế thừa từ interface có tên IDisposable và cài đặt phương thức Dispose().
73
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức Dispose:• Phương thức Dispose:− Phương thức Dispose nói chung không giải phóng bộ
nhớ được NET quản lý nó được sử dụng chỉ để lấy lạinhớ được .NET quản lý, nó được sử dụng chỉ để lấy lại các nguồn tài nguyên mà .Net không quản lý (unmanaged resources) mà một class đang giữ tham chiếu trước đóchiếu trước đó.
− Phương thức Dispose không loại bỏ vùng nhớ của chính đối tượng, nó chỉ là giải phóng vùng nhớ mà đối
ế ốtượng tham chiếu tới. Đối tượng sẽ được loại bỏ khi bộ thu dọn rác thấy thuận lợi.
− Khi cài đặt phương thức Dispose phải nhớ gọi
74
− Khi cài đặt phương thức Dispose phải nhớ gọi GC.SuppressFinalize(this) để ngăn finalizer khỏi vận hành.
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức Dispose:• Phương thức Dispose:− Interface có tên IDisposable chỉ bao gồm một phương
thức Dispose không có tham sốthức Dispose không có tham số.public interface IDisposable{
void Dispose();}
− Ví dụ: xét đoạn mã lệnh khai báo lớp Test như sau:
75
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
class Test : IDisposable{
private bool isDisposed = false;p p ;~Test(){
Dispose(false);Dispose(false);}protected void Dispose(bool disposing){
if (disposing){{
// Mã lệnh thu hồi managed resources của class}// Mã lệnh thu hồi un-managed resources của class
76
// Mã lệnh thu hồi un-managed resources của classisDisposed = true;
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
public void Dispose(){
Dispose(true);p ( );GC.SuppressFinalize(this);
}public double tong(Int32 x Int32 y)public double tong(Int32 x, Int32 y){
return x + y; }
}
− Chú ý: phương thức GC.SuppressFinalize(this) phải được gọi sau khi gọi phương thức Dispose(true) Để bảo đảm rằng lời gọi sau chỉ được thực hiện nếu và chỉ nếu phương thức Dispose đã hoàn tất
77
được thực hiện nếu và chỉ nếu phương thức Dispose đã hoàn tất thành công.
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Các lưu ý khi cài đặt Dispose:• Các lưu ý khi cài đặt Dispose:− Implement IDisposable trên mỗi kiểu có một finalizer − Bảo đảm rằng một đối tượng sẽ không được sử dụng− Bảo đảm rằng một đối tượng sẽ không được sử dụng
sau khi tạo lời gọi tới phương thức Dispose. − Gọi Dispose trên tất cả các kiểu IDisposable mỗi khi làm
iệ ới húviệc với chúng. − Ngăn ngừa các lời gọi sau đó tới finalizer từ bên trong
phương thức Dispose với việc sử dụng phương thức p g p ệ ụ g p gGC.SuppressFinalize.
− Tránh tạo các dispose kiểu giá trị
78
− Tránh việc throw các exceptions từ bên trong các phương thức Dispose.
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức tính toán xử lý:• Phương thức tính toán, xử lý:− Một phương thức là một khối mã lệnh chứa một dãy
các câu lệnh có cùng mục tiêu nào đócác câu lệnh có cùng mục tiêu nào đó
− Các dạng phương thức tính toán, xử lý:• Phương thức không trả về giá trị, không tham sốPhương thức không trả về giá trị, không tham số • Phương thức có trả về giá trị, không tham số • Phương thức trả về giá trị thông qua tham số của phương
thứthức • Phương thức với tham số sử dụng từ khóa params • Tái nghĩa phương thức (Method Overloading)
79
Tái nghĩa phương thức (Method Overloading)
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Cú pháp khai báo phương thức:• Cú pháp khai báo phương thức:
class <Tên lớp>
{{
[private | public] Kiểu_dữ_liệu Tên_phươg_thức ()
{
// Lệnh xử lý
return <biểu thức chứa kết quả trả về>;
}
// Tiếp tục cho những khai báo khác
//
80
//…
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Ví dụclass NHAN_VIEN{ // ……
// Khai báo các phương thứcpublic double Tro_cap() Ho nhan vien
NHAN_VIEN
{return (So_con * 100000);
}
Ho_nhan_vienTen_nhan_vienNgay_sinh
public double Tien_thuong(){
return (Tham_nien * 500000);
He_so_luongNgay_vao_lam
}// ……
// Tiếp tục cho những khai báo khác
So_conTro_capTien thuong
81
// Tiếp tục cho những khai báo khác// ……
}
Tien_thuong
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức tính toán xử lý không trả về giá• Phương thức tính toán, xử lý không trả về giá
trị, không tham số :− Thường được sử dụng trong các trường hợp khởi tạoThường được sử dụng trong các trường hợp khởi tạo
các giá trị mặc định cho các trường dữ liệu của class hay trong các phương thức xử lý mà không quan tâm tới kết quả trả vềtới kết quả trả về
− Ví dụ:
82
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức tính toán xử lý trả về giá trị không tham• Phương thức tính toán, xử lý trả về giá trị, không tham
số :− Được sử dụng trong trường hợp thông qua phương thức để lấy giá
trị của một trường dữ liệu trong class. Hoặc sử dụng các giá trị của các trường dữ liệu trong class để xử lý tính toán và trả về kết quả.
− Cú pháp:<khai báo cấp độ truy xuất> [static] <kiểu trả về> Tên_phương thức()
{
// Các khai báo cục bộ và Các lệnh xử lý nếu có// Các khai báo cục bộ và Các lệnh xử lý nếu có
Return <biểu thức chứa kết quả trả về>;
}
83
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức tính toán xử lý trả về giá trị• Phương thức tính toán, xử lý trả về giá trị,
không tham số :− Ví dụ:Ví dụ:
84
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức tính toán xử lý trả về giá trị• Phương thức tính toán, xử lý trả về giá trị
thông tham số của phương thức:− Sau khi xử lý, phương thức sẽ trả về một hoặc nhiều giá ý, p g ộ ặ g
trị.− Để trả về giá trị thông qua tham số, sử dụng từ khóa ref
khi khao báo tham sốkhi khao báo tham số− Ví dụ:
public void lay canh(ref double r, ref double c)p y_ ( , ){
r = rong;
85
c = cao;}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức tính toán xử lý trả về giá trị• Phương thức tính toán, xử lý trả về giá trị
thông tham số của phương thức:− Khi gọi phương thức cũng phải dùng từ khóa ref trướcKhi gọi phương thức cũng phải dùng từ khóa ref trước
các tham số
− Ví dụ:ụdouble cr, cc;
hcn1.lay_canh(ref cr, ref cc);
Console.WriteLine("Chieu rong:{0}, chieu cao:{1}", cr, cc );
86
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức tính toán xử lý trả về giá trị• Phương thức tính toán, xử lý trả về giá trị
thông tham số của phương thức:− C# còn cung cấp một từ khóa khác là out cho công việc g p ộ g ệ
này. Nếu thay thế từ khóa ref bằng từ khóa out mọi hoạt động là như nhau, ngoại trừ việc đối với từ khóa out bạn không cần phải khởi tạo biến truyền trước khi ởigởi.
− Ví dụ:public void lay canh(out double r out double c)public void lay_canh(out double r, out double c){
r = rong;
87
c = cao;}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức tính toán xử lý trả về giá trị• Phương thức tính toán, xử lý trả về giá trị
thông tham số của phương thức:− Khi gọi phương thức cũng phải dùng từ khóa ref trướcKhi gọi phương thức cũng phải dùng từ khóa ref trước
các tham số
− Ví dụ:ụdouble cr, cc;
hcn1.lay_canh(out cr, out cc);
Console.WriteLine("Chieu rong:{0}, chieu cao:{1}", cr, cc );
88
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức tính toán xử lý với tham số sử dụng từ• Phương thức tính toán, xử lý với tham số sử dụng từ
khóa params :− Từ khóa params cho phép chỉ định một tham số với số lượng p p p ị ộ ợ g
các tham số có thể thay đổi tùy biến.
− Chỉ có duy nhất một khai báo dạng này trong khai báo tham số của phương thức và nó phải được đặt tại vị trí khai báosố của phương thức và nó phải được đặt tại vị trí khai báo sau cùng trong danh sách các tham số khai báo
− Ví dụ:
89
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Phương thức tính toán xử lý với tham số sử dụng từ• Phương thức tính toán, xử lý với tham số sử dụng từ
khóa params :− Gọi thực hiện:ọ ự ệ
DangSuDungParams_2(1, ‘a’, “test”);
− Kết quả xuất ra màn hình:
90
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Tái nghĩa phương thức (Method Overloading) :• Tái nghĩa phương thức (Method Overloading) :− C# cho phép cài đặt các phương thức có cùng tên với
nhau nó mang ý nghĩa tái định nghĩa phương thức (haynhau, nó mang ý nghĩa tái định nghĩa phương thức (hay còn gọi là nạp chồng phương thức)
− Các tham số được tái nghĩa phải thỏa mãn:• Kiểu của các tham số khác nhau • Số lượng của tham số khác nhau
91
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Tái nghĩa phương thức (Method Overloading) :• Tái nghĩa phương thức (Method Overloading) :− Ví dụ:
92
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Truyền tham số trong phương thức :• Truyền tham số trong phương thức :− Khi gọi thực hiện các phương thức, thông thường phải
truyền vào các giá trị để cho phương thức xử lý thaotruyền vào các giá trị để cho phương thức xử lý, thao tác này được gọi là truyền tham số
− Có 3 dạng truyền tham số cơ bản:• Truyền tham trị• Truyền tham chiếu
93
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Truyền tham số trong phương thức :Truyền tham số trong phương thức :
− Truyền tham trị: chỉ có bản sao của tham số thực được truyền cho tham số hình thức, mọi thay đổi của tham số hình thức trong
ốphương thức sẽ không ảnh hưởng tới tham số thực− Ví dụ:
Public int test(int so1){
So1 += 1;}St ti id M i ( t i [] )Static void Main(string[] args){
int a = 5;test (a);
94
test (a);Console.WriteLine(a); // 5
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Các phương thức (Method)• Truyền tham số trong phương thức :Truyền tham số trong phương thức :
− Truyền tham chiếu: mọi thay đổi của tham số hình thức trong phương thức sẽ ảnh hưởng trực tiếp tới tham số thực. Để khai báo th ố th d t ề th hiế ử d từ khó f t ớtham số theo dạng truyền tham chiếu, sử dụng từ khóa ref trước khai báo tham số
− Ví dụ:P bli i t t t( f i t 1)Public int test( ref int so1){
So1 += 1;}}Static void Main(string[] args){
int a = 5;test (a);
95
test (a);Console.WriteLine(ref a); // 6
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Xây dựng các thành phần trong class
• Biến thành viên (Field)• Thuộc tính (Property)• Các phương thức (Method)• Nạp chồng toán tử (Operator Overloading)• Delegate trong C#• Delegate trong C#• Sự kiện (Event)
96
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Nạp chồng toán tử (Operator Overloading)• Ý nghĩa :• Ý nghĩa :− Cho phép định nghĩa lại các toán tử cơ bản cho phép
thực hiện các phép tính toán trên nhiều kiểu dữ liệuthực hiện các phép tính toán trên nhiều kiểu dữ liệu khác nhau.
− Đối với các toán tử so sánh: ==, !=, >=, <, <=, > thì khi ồđịnh nghĩa lại phải nạp chồng theo từng cặp. Ví dụ nạp
chồng toán tử == thì cũng phải nạp chồng luôn toán tử so sánh !=.
97
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Nạp chồng toán tử (Operator Overloading)• Cú pháp :• Cú pháp :
public static <kiểu dữ liệu> operator <toán tử>(tham số 1, tham số 2)tham số 2)
{
//tập hợp lệnh xử lý//tập hợp lệnh xử lý
return <kết quả trả về>
}}
98
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Nạp chồng toán tử (Operator Overloading)• Ví dụ: trong lớp phan so định nghĩa lại toán• Ví dụ: trong lớp phan_so, định nghĩa lại toán
tử + để thực hiện cộng 2 phân số:public static phan so operator +(phan so ps1 phan so ps2)public static phan_so operator +(phan_so ps1, phan_so ps2)
{
phan_so kq = new phan_so(0,1);
kq.tu = ps1.tu * ps2.mau + ps1.mau * ps2.tu;
kq.mau = ps2.mau * ps1.mau;
return kq;
}
99
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Xây dựng các thành phần trong class
• Biến thành viên (Field)• Thuộc tính (Property)• Các phương thức (Method)• Nạp chồng toán tử (Operator Overloading)• Delegate trong C#• Delegate trong C#• Sự kiện (Event)
100
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Delegate trong C#• Khái niệm:• Khái niệm:− delegate là một class có thể giữ một tham chiếu tới một
phương thứcphương thức.
− lớp delegate có một dấu hiệu như chữ ký (signature), và nó chỉ giữ các tham chiếu tới các phương thức mà chữ ký của nó phù hợp. Theo cách như vậy một delegate tương đương với một con trỏ hàm hay một callback an toàn kiểu (type-safe)
− Khai báo một delegate là khả năng định nghĩa một delegate class. Sự khai báo cung cấp chữ ký của delegate và bộ vận hành ngôn ngữ chung (common
101
delegate, và bộ vận hành ngôn ngữ chung (common language runtime) giúp cung cấp sự thực thi.
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Delegate trong C#• Khai báo delegate:• Khai báo delegate:− Cú pháp:
bli d l t <Kiể > Tê d l t (Th ố)public delegate <Kiểu> Tên_delegate(Tham_số);
− Ý nghĩa:• Kiểu: delegate sẽ trả về một kiểu dữ liệu (int string ) hoặc• Kiểu: delegate sẽ trả về một kiểu dữ liệu (int, string,…) hoặc
không trả dữ liệu về (void).public delegate void da_ghi(bool ghi);
102
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Xây dựng các thành phần trong class
• Biến thành viên (Field)• Thuộc tính (Property)• Các phương thức (Method)• Nạp chồng toán tử (Operator Overloading)• Delegate trong C#• Delegate trong C#• Sự kiện (Event)
103
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Sự kiện (Event)• Dùng để gởi thông báo của đối tượng ra bên ngoài• Dùng để gởi thông báo của đối tượng ra bên ngoài• Cú pháp:
public event [Kiểu delegate] Tên sự kiệnpublic event [Kiểu delegate] Tên_sự_kiện
− Ý nghĩa:• [Kiểu delegate]: có thể sử dụng delegate của hệ thống (EventHandle).
E tH dl th ộ ề S t dù để t hữ kiệEventHandle thuộc về namespace System, dùng để tạo những sự kiện không cần truyền dữ liệu cho đối tượng sử dụng.
• Ví dụ:
public class HOC_SINH
{
public event System EventHandle Thay doi;
104
public event System.EventHandle Thay_doi;
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Sự kiện (Event)• Cú pháp:• Cú pháp:− Ngoài ra có thể sử dụng delegate riêng do người dùng
khai báokhai báo
− Ví dụ:
public delegate void da ghi(bool ghi);public delegate void da_ghi(bool ghi);public class HOC_SINH
{{
public event da_ghi Da_ghi_du_lieu;
}
105
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Sự kiện (Event)
• Gọi phát sinh sự kiện:− Cú pháp:Cú pháp:
<Tên_sự_kiện>(giá trị của tham số);
106
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Ví dụ// l HOC SINH// class HOC_SINHpublic event System.EventHandle Thay_doi;public string Ho hoc sinhpublic string Ho_hoc_sinh{ get{ return mHo_hoc_sinh; }
set{ mHo_hoc_sinh = value;
if(Thay_doi!=null)Thay_doi(this, new System.EventArgs()); // phát sinh lời gọi để thực hiện sự kiện
}
107
}}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Sự kiện (Event)• Sử dụng sự kiện trong những xứ lý của class• Sử dụng sự kiện trong những xứ lý của class
khác:− Ví dụ: lớp MH HOC SINH có đối tượng kiểu− Ví dụ: lớp MH_HOC_SINH có đối tượng kiểu
HOC_SINH như sau:
public class MH_HOC_SINH{
HOC_SINH hs = new HOC_SINH();}
108
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Sự kiện (Event)• Sử dụng sự kiện trong những xứ lý của class• Sử dụng sự kiện trong những xứ lý của class
khác:− Sử dụng sự kiện Thay doi của HOC SINH:− Sử dụng sự kiện Thay_doi của HOC_SINH:
• Tạo một hàm xử lý cho sự kiện với danh sách tham số phải hoàn toàn giống với delegate của sự kiện.
• Ví dụ: tạo hàm xử lý sự kiện thay đổi của class HOC_SINH:public class MH_HOC_SINH{{private void Xu_ly_thay_doi(object sender, System.EventArgs e){ …}}
109
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Sự kiện (Event)• Sử dụng sự kiện trong những xử lý của class• Sử dụng sự kiện trong những xử lý của class
khác:− Sử dụng sự kiện Thay doi của HOC SINH:ụ g ự ệ y_ _
• Gán hàm xử lý sự kiện vừa tạo vào sự kiện của đối tượng thể hiện.
• Ví dụ: liên kết hàm xử lý với sự kiện của đối tượng:Ví dụ: liên kết hàm xử lý với sự kiện của đối tượng:public class MH_HOC_SINH{ …public MH HOC SINH()public MH_HOC_SINH(){ …
this.hs.Thay_doi +=new System.EventHandler(this.Xu_ly_thay_doi);
}
110
}…}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Ví dụ: Lớp PHAN_SO• Tạo lớp Phân số (PHAN SO)• Tạo lớp Phân số (PHAN_SO)− Một phân số bao gồm các thông tin
• Tử số• Tử số• Mẫu số
− Cho phép thực hiện các phép tính trên phân sốCho phép thực hiện các phép tính trên phân số• Cộng, Trừ, Nhân, Chia• Tối giản phân số• …
111
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Ví dụ: Lớp PHAN_SO
• Tạo lớp Phân số (PHAN_SO)
112
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Ví dụ: Lớp PHAN_SOPHAN_SO
Tu_soMau soMau_soPHAN_SO(pTu_so, pMau_so)Toi_gian_phan_so()Kiem_tra_mau_so(pMau_so) BooleanCong(pPhan_so) PHAN_SOTru(pPhan_so) PHAN_SONhan(pPhan_so) PHAN_SOChia(pPhan so) PHAN SO
113
Chia(pPhan_so) PHAN_SO
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Ví dụ: Lớp PHAN_SO• Danh sách biến thành viên• Danh sách biến thành viên
public class PHAN_SO
{ //……
#region "Danh sách các biến thành viên"
private int mTu_so;
private int mMau_so;
#endregion
//……
114
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Ví dụ: Lớp PHAN_SO• Danh sách các thuộc tínhDanh sách các thuộc tính
public int Tu_so public int Mau_so
{
get { return mTu_so; }
set { mTu so = value; }
{
get { return mMau_so; }
setset { mTu_so = value; }
}
set
{
if (Kiem_tra_mau_so(value))
mMau_so = value;
}
115
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Ví dụ: Lớp PHAN_SO• Danh sách hàm khởi tạoDanh sách hàm khởi tạo
public PHAN_SO(){
Tu so = 1;Tu_so = 1;Mau_so = 1;
}public PHAN SO(int pTu so int pMau so)public PHAN_SO(int pTu_so, int pMau_so){
if(Kiem_tra_mau_so(pMau_so)){{
Tu_so = pTu_so;Mau_so = pMau_so;
}
116
}}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Ví dụ: Lớp PHAN_SO• Danh sách phương thức xử lý
private Boolean Kiem_tra_mau_so(int pMau_so)
{
return pMau so != 0;p _ ;
}
117
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Ví dụ: Lớp PHAN_SO• Danh sách phương thức xử lý
public void Toi_gian_phan_so(){
if (Mau_so < 0){{Mau_so = Math.Abs(Mau_so);Tu_so = -1 * Tu_so;
}int uoc_so = USCLN(Tu_so, Mau_so);Tu so /= uoc so;
118
Tu_so /= uoc_so;Mau_so /= uoc_so;
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Ví dụ: Lớp PHAN_SO• Danh sách phương thức xử lý• Danh sách phương thức xử lý
public PHAN_SO Cong(int pTu_so,int pMau_so)
{{
PHAN_SO psTong = new PHAN_SO(pTu_so, pMau_so);
psTong.Tu so = Tu so * psTong.Mau so + psTong.Tu so *psTong.Tu_so Tu_so psTong.Mau_so psTong.Tu_so Mau_so;
psTong.Mau_so = psTong.Mau_so * Mau_so;
T T i i h ()psTong.Toi_gian_phan_so();
return psTong;
}
119
}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Ví dụ: Lớp PHAN_SO• Danh sách phương thức xử lý• Danh sách phương thức xử lý
public PHAN_SO Cong(PHAN_SO pPhan_so){
return Cong(pPhan_so.Tu_so, pPhan_so.Mau_so);
}
120
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài tập• Yêu cầu• Yêu cầu−Bài 1: Phân số
• Tạo lớp PHAN SO• Tạo lớp PHAN_SO• Thực hiện các phép tính trên phân số (+, -, *, /)
121
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Bài 4: Classes, objects và namespaces
• Tổng quan về lập trình hướng đối tượng• Xây dựng class trong C#• NamespacesNamespaces
122
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Namespaces• Namespaces là các thành tố của chương trình• Namespaces là các thành tố của chương trình
C# được thiết kế nhằm giúp tổ chức các chương trình một cách ngắn gọn, dễ dàng tái g ộ g gọ , gsử dụng một số mã lệnh
• Namespaces không tương ứng với tên tập tin p g g g ậphay thư mục. Ngay cho dù việc đặt tên của thư mục hay tập tin tương ứng với namespaces
123
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Namespaces• Ví dụ khai báo namespace:• Ví dụ khai báo namespace:
using System;namespace tên namspacenamespace tên_namspace {
// class bắt đầu chương trìnhclass tên_class {{
// Phương thức Main bắt đầu sự thực thi chương trình.public static void Main() {{
// Các câu lệnh
}}
124
}}
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Namespaces• Cách tốt nhất để tổ chức các namespaces là• Cách tốt nhất để tổ chức các namespaces là
theo hướng hệ thống phân cấp. Hệ thống phân cấp này có thể được trình bày bởi việc lồng các p y ợ y ệ gnamespaces với nhau.
125
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Namespaces• Cách khác để viết namespace lồng nhau:• Cách khác để viết namespace lồng nhau:
126
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Namespaces• Truy xuất các thành phần trong namespace:• Truy xuất các thành phần trong namespace: − Khi truy xuất đến các thành phần trong namespace phải
truy xuất thông qua tên namespacetruy xuất thông qua tên namespace
− Cú pháp:<Tên namespace>.<Tên thành phần><Tên_namespace>.<Tên thành phần>
127
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
128