You are on page 1of 53

LẬP TRÌNH .

NET
MICROSOFT .NET PROGRAMMING

TS. Võ Đức Hoàng

Khoa Công nghệ thông tin


Trường Đại học Bách khoa - Đại học Đà Nẵng
Nội dung chi tiết
■ Giới thiệu C# và nền tảng .NET

■ Mảng dữ liệu

■ Lớp và đối tượng

■ Thừa kế và trừu tượng

■ Delegate, Exceptions, Collection & Generic

■ Static class, Partial class, Generic Namespace

■ Implicitly, Dynamic, Nullable, Anonymous typed

■ Lambda expressions and Linq


23/02/2022 LẬP TRÌNH .NET 2
Nội dung chi tiết
■ Multi-threading

■ Thao tác với tập tin và thư mục

23/02/2022 LẬP TRÌNH .NET 3


Tài liệu học tập
 Giáo trình chính:
- Andrew Troelsen, Pro C# 5.0 and The .NET 4.5 Framework, Apress,
2012.

 Tài liệu tham khảo:


- Simon Kendal, Object Oriented Programming using C#, BookBoon,
2012.

- Microsoft MSDN, C# Programming Guide for Visual Studio 2013.

- Joe Mayo, LINQ Programming, McGraw-Hill Education, 2009.

- Andrew Clymer, Pro Asynchronous Programming with .NET, Apress,


2013…

23/02/2022 LẬP TRÌNH .NET 4


Thừa kế và trừu tượng
Đa thừa kế – Đa hình
(4)

23/02/2022 LẬP TRÌNH .NET 5


Nội dung
 Thừa kế
- Các loại thừa kế
- Từ khóa base, new
- Constructor và tính kế thừa
 Trừu tượng
- Overiding
- Lớp, phương thức trừu tượng
 Đa kế thừa
- Interface
- Kế thừa interface
 Đa hình (Polymorphism)
- Đa hình khi chạy
- Đa hình khi biên dịch
23/02/2022 LẬP TRÌNH .NET 6
SỰ PHÂN CẤP THỪA KẾ

 Các lớp trong C# tồn tại trong một hệ thống thứ bậc
phân cấp, gọi là cây thừa kế

 Lớp bậc trên gọi là lớp cha (base_class) trong khi các
lớp bậc dưới gọi là lớp con (derived_class)

 Trong C# một lớp chỉ có một lớp cha duy nhất (đơn thừa
kế)

23/02/2022 LẬP TRÌNH .NET 7


TÍNH THỪA KẾ

 Cho phép tạo ra một lớp mới kế thừa thuộc tính và


phương thức của một lớp khác

 Lớp mới có thể xây dựng thêm các thuộc tính hoặc
phương thức riêng

 Giúp nhất quán các thuộc tính và phương thức

 Tái sử dụng code: phần code chung định nghĩa một lần
tại lớp cha, lớp con chỉ việc sử dụng mà không cần định
nghĩa lại

 Thuận tiện bảo trì và phát triển


23/02/2022 LẬP TRÌNH .NET 8
TÍNH THỪA KẾ

23/02/2022 LẬP TRÌNH .NET 9


TÍNH THỪA KẾ
 Cú pháp:

 Trong c# có nhiều loại thừa kế được hỗ trợ như thừa kế đơn (Single
Inheritance), thừa kế đa cấp độ (Mutilevel Inheritance), thừa kế
phân cấp (Hierarchical Inheritance)

 Lớp con chỉ sử dụng được các thuộc tính và phương thức có phạm
vi truy cập là public, internal, protected của lớp cha

23/02/2022 LẬP TRÌNH .NET 10


TÍNH THỪA KẾ

 Single Inheritance: một lớp chỉ kế thừa từ một lớp


cha

23/02/2022 LẬP TRÌNH .NET 11


TÍNH THỪA KẾ

 Multilevel Inheritance: một lớp kế thừa từ một lớp


cha, mà lớp cha đó lại kế thừa từ một lớp khác

23/02/2022 LẬP TRÌNH .NET 12


TÍNH THỪA KẾ

 Hierarchical Inheritance: một lớp có nhiều lớp con


hay nói cách khác là có nhiều lớp cùng thừa kế từ
một lớp cha

23/02/2022 LẬP TRÌNH .NET 13


23/02/2022 LẬP TRÌNH .NET 14
TÍNH THỪA KẾ

 Đối tượng lớp cha có thể tham chiếu đến đối tượng
lớp con nhưng ngược lại thì không

 Dùng từ khóa base truy cập đến các thành phần


bên trong lớp cha từ lớp con

 Không dùng từ khóa base cho các thành phần static

23/02/2022 LẬP TRÌNH .NET 15


TÍNH THỪA KẾ
 Từ khóa new trong kế thừa để xác định phạm vi của phương thức
(nó không phải là toán tử khởi tạo đối tượng)

 Dùng từ khóa new cho phương thức lớp con trùng tên phương thức
lớp cha

23/02/2022 LẬP TRÌNH .NET 16


CONSTRUCTOR VÀ TÍNH KẾ THỪA

 Lớp cha (lớp cơ sở) có định nghĩa phương thức khởi tạo
(constructor) có tham số thì tại các lớp dẫn xuất (lớp con hay lớp
được kế thừa) phải gọi phương thức khởi tạo của lớp cha

23/02/2022 LẬP TRÌNH .NET 17


23/02/2022 LẬP TRÌNH .NET 18
OVERLOAD

 Tạo ra nhiều phương thức (method) có cùng tên, trong


cùng một phạm vi (scope), nhưng khác nhau về đối
số đầu vào (arguments) hoặc số lượng đối số đầu vào

 Trình biên dịch dựa vào số lượng tham số, data type của
tham số, hoặc thứ tự của các tham số để gọi đúng
phương thức cần thực hiện.

23/02/2022 LẬP TRÌNH .NET 19


OVERRIDING
 Cho phép lớp con định nghĩa lại phương thức của lớp cha

 Phương thức được override (ở lớp cha) và phương thức override


(ở lớp con) phải giống hệt nhau ở cả 3 phần: kiểu dữ liệu trả về, tên
phương thức và danh sách tham số

 Không thể override constructor.

23/02/2022 LẬP TRÌNH .NET 20


OVERRIDING

23/02/2022 LẬP TRÌNH .NET 21


OVERRIDE VÀ OVERLOAD

23/02/2022 LẬP TRÌNH .NET 22


TỪ KHOÁ SEALED

 Một lớp được chỉ định với từ khoá sealed là một lớp
không cho phép kế thừa
s

 Một phương thức được chỉ định với từ khoá sealed


là một phương thức không cho overriding.

23/02/2022 LẬP TRÌNH .NET 23


LỚP TRỪU TƯỢNG

 Lớp trừu tượng là lớp có các hành vi chưa được xác định rõ
- Ví dụ 1: Đã là hình thì chắc chắn là có diện tích và chu vi nhưng chưa
xác định được cách tính, mà phải là một hình cụ thể như chữ nhật, tròn,
tam giác… mới có thể xác định cách tính

- Ví dụ 2: Sinh viên thì chắc chắn có điểm trung bình nhưng chưa xác
định được cách tính như thế nào mà phải là sinh viên của ngành nào
mới biết được môn học và công thức tính điểm cụ thể.

 Vậy lớp hình và lớp sinh viên là các lớp trừu tượng vì phương
thức tính chu vi, diện tích và tính điểm chưa thực hiện được.

23/02/2022 LẬP TRÌNH .NET 24


LỚP TRỪU TƯỢNG

23/02/2022 LẬP TRÌNH .NET 25


ĐỊNH NGHĨA LỚP TRỪU TƯỢNG

23/02/2022 LẬP TRÌNH .NET 26


ĐỊNH NGHĨA LỚP TRỪU TƯỢNG

23/02/2022 LẬP TRÌNH .NET 27


ĐỊNH NGHĨA LỚP TRỪU TƯỢNG

 Từ khóa abstract được sử dụng để định nghĩa lớp và


phương thức trừu tượng

 Phương thức trừu tượng là phương thức không có phần thân


xử lý và được khai báo bằng từ khóa abstract.

 Lớp chứa phương thức trừu tượng thì lớp đó phải là lớp trừu
tượng.

 Trong lớp trừu tượng có thể định nghĩa các phương thức cụ
thể hoặc khai báo các trường

 Không thể sử dụng new để tạo đối tượng từ lớp trừu tượng.

23/02/2022 LẬP TRÌNH .NET 28


23/02/2022 LẬP TRÌNH .NET 29
Nội dung
 Thừa kế
- Các loại thừa kế
- Từ khóa base, new
- Constructor và tính kế thừa
 Trừu tượng
- Overiding
- Lớp, phương thức trừu tượng
 Đa kế thừa
- Interface
- Kế thừa interface
 Đa hình (Polymorphism)
- Đa hình khi chạy
- Đa hình khi biên dịch
23/02/2022 LẬP TRÌNH .NET 30
ĐA THỪA KẾ

 C# không hỗ trợ đa thừa kế

 Làm thế nào để một lớp có thể sử dụng chung được


các thuộc tính và phương thức của 2 hay nhiều lớp
khác?

 Làm thế nào để áp dụng các quy tắc khác nhau, tùy
vào hoàn cảnh khác nhau của từng đối tượng?
23/02/2022 LẬP TRÌNH .NET 31
INTERFACE

 C# hỗ trợ sử dụng interface giải quyết nhiều vấn đề.


 Interface được xem như là một lớp, lớp đó có thể được
một class hoặc struct khác implement nó

23/02/2022 LẬP TRÌNH .NET 32


INTERFACE

 Cú pháp khai báo interface

23/02/2022 LẬP TRÌNH .NET 33


INTERFACE

 Các lưu ý khi khai báo interface


- Khai báo interface chỉ chứa các khai báo của các non-static
function member (phương thức (methods), thuộc tính
(properties), sự kiện (events), chỉ mục (indexers))
- Chỉ khai báo các thành phần, không khai báo code thực thi,
không định nghĩa nội dung code
- Các thành phần không được sử dụng trong interface là:
constructor, destructor, field, hằng, thành phần static.
- Không thể khai báo hay chỉ định phạm vi truy cập (access
modifiers) cho các thành phần bên trong interface. Các thành
phần này sẽ mặc định là public

23/02/2022 LẬP TRÌNH .NET 34


INTERFACE

 Khai báo một interface IDung, bao gồm các thành


phần ĐÚNG:

23/02/2022 LẬP TRÌNH .NET 35


INTERFACE

 Khai báo một interface ISai, bao gồm các thành


phần SAI:

23/02/2022 LẬP TRÌNH .NET 36


INTERFACE
 Thực thi interface
- Chỉ có các class/ struct có thể thực thi interface

- Khi thực thi interface, các class/ struct phải:


 Thêm khai báo interface vào khai báo class/ struct

 Thực thi tất cả các thành phần của interface trong class/ struct

23/02/2022 LẬP TRÌNH .NET 37


INTERFACE
 Thực thi interface

 Nếu một lớp thực thi interface, nó phải thực thi hết tất cả các thành
phần của interface

 Nếu lớp được dẫn xuất từ lớp cơ sở và có thực thi interface: tên lớp
cơ sở phải đặt trước các tên interface trong khai báo lớp

 Mỗi interface không được phép kế thừa từ một class nào cả

 Không thể tạo ra một đối tượng từ interface

23/02/2022 LẬP TRÌNH .NET 38


Xây dựng 1 interface Iperson có 1 phương thức: void show(),

 1 class person inherite tu Iperson co:

 2 property: name, address

 phương thức: show (show ra name và address)

 1 lớp student kế thừa từ lớp person

 có thuộc tính course

 phương thức show ra course

23/02/2022 LẬP TRÌNH .NET 39


23/02/2022 LẬP TRÌNH .NET 40
INTERFACE
 Interface là một kiểu tham chiếu (reference type)
- Không thể truy xuất interface trực tiếp thông qua các thành phần của đối tượng
thuộc lớp

- Có thể tham chiếu đến interface thông qua ép kiểu của đối tượng thuộc lớp sang
kiểu interface

23/02/2022 LẬP TRÌNH .NET 41


INTERFACE

 Kế thừa Interface
- Một interface có thể được kế thừa từ 1/nhiều interface
- Chỉ định 1 interface kế thừa từ các interface khác:
 Thêm danh sách các interface kế thừa vào khai báo interface
 Các interface cách nhau bởi dấu phẩy (,)

23/02/2022 LẬP TRÌNH .NET 42


INTERFACE

 Ví dụ nhiều lớp thực thi interface

23/02/2022 LẬP TRÌNH .NET 43


Hiện thực hóa ví dụ. (Chap04_Demo3)

23/02/2022 LẬP TRÌNH .NET 44


SỰ GIỐNG NHAU CỦA ABSTRACT CLASS VÀ INTERFACE

 Abstract class và interface đều không thể khởi tạo đối tượng từ
chính nó được

 Abstract class và interface đều có chứa abstract method.

 Abstract class và interface đều được kế thừa hoặc thực thi phương
thức hoặc thuộc tính từ các class dẫn xuất nó.

 Abstract class và interface đều có thể implement từ một hoặc nhiều


interface

 Abstract class và interface đều giúp cho code trở nên sáng sủa và
gọn gàng, dễ bảo trì và nâng cấp

23/02/2022 LẬP TRÌNH .NET 45


SỰ KHÁC NHAU CỦA ABSTRACT CLASS VÀ INTERFACE

23/02/2022 LẬP TRÌNH .NET 46


TÍNH ĐA HÌNH

 Tính đa hình là hiện tượng các đối tượng thuộc các lớp
khác nhau có thể hiểu cùng 1 thông điệp theo các cách
khác nhau
 Cho phép một thao tác có các cách xử lý khác nhau
trên các đối tượng khác nhau

23/02/2022 LẬP TRÌNH .NET 47


TÍNH ĐA HÌNH

 Tính đa hình được phân loại:

23/02/2022 LẬP TRÌNH .NET 48


TÍNH ĐA HÌNH

 Đa hình khi chạy (Run-time Polymorphism) –


Override.
- Các lớp phải có quan hệ kế thừa với cùng 1 lớp cha nào
đó

- Phương thức đa hình phải được ghi đè (override) ở các


lớp con

23/02/2022 LẬP TRÌNH .NET 49


TÍNH ĐA HÌNH
 Đa hình khi chạy (Run-time Polymorphism) – Override.

23/02/2022 LẬP TRÌNH .NET 50


TÍNH ĐA HÌNH

 Đa hình khi biên dịch (Compile-time Polymorphism)


- Tính đa hình khi biên dịch thể hiện ở sự đa dạng nhờ sự
khác biệt :
 Số lượng tham số

 Kiểu dữ liệu của tham số

23/02/2022 LẬP TRÌNH .NET 51


Hiện thực hóa ví dụ đa hình. (Chap04_Demo4)

23/02/2022 LẬP TRÌNH .NET 52


23/02/2022 LẬP TRÌNH .NET 53

You might also like