
Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
46
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Chương 3: Lập trình hướng đối tượng trong C#
3.1 Xây dựng lớp – Đối tượng
3.1.1 Định nghĩa lớp
Trong thế giới thực, bạn thường thấy nhiều đối tượng riêng lẻ thuộc cùng một
loại. Có thể có hàng nghìn chiếc xe đạp cùng tồn tại, tất cả chúng đều giống nhau về
cách sản xuất và mẫu mã. Mỗi chiếc xe đạp đã được tạo ra từ một tập thiết kế chung,
vì thế chúng giống nhau về thành phần cấu tạo. Trong thuật ngữ hướng đối tượng,
chúng ta nói rằng chiếc xe đạp là một thể hiện của một lớp các đối tượng có tên gọi là
xe đạp. Một lớp là một bản thiết kế mà từ đó các đối tượng cụ thể được tạo ra.
Trong C#, mọi chuyện đều xảy ra trong một lớp. Như các ví dụ mà chúng ta đã
tìm hiểu trước, các hàm đều được đưa vào trong một lớp, kể cả hàm đầu vào của
chương trình (hàm Main()):
public classTester
{
public static int Main()
{
//....
}
}
Để định nghĩa một kiểu dữ liệu mới hay một lớp đầu tiên phải khai báo rồi sau
đó mới định nghĩa các thuộc tính và phương thức của kiểu dữ liệu đó. Khai báo một
lớp bằng cách sử dụng từ khoá class. Cú pháp đầy đủ của khai báo một lớp như sau:
[Mức độ truy cập] class <Định danh lớp> [: Lớp cơ sở]
{
[Nội dung lớp có thể bao gồm một hoặc nhiều thuộc tính và phương
thức]
[Mức độ truy cập] <Định danh thuộc tính>;
[Mức độ truy cập] <Định danh phương thức>()
{
[Nội dung phương thức]
}
}
Trong đó:

Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
47
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Mức độ truy cập: Thông thường, mức độ truy cập (access-modifiers) của một
lớp là public. Ngoài ra các thành phần của lớp cũng có mức độ truy cập riêng cho biết
loại phương thức nào được phép truy cập đến nó, hay nói cách khác nó mô tả phạm vi
mà thành phần đó được nhìn thấy.
Thuộc tính
Giới hạn truy cập
public
Không hạn chế. Những thành viên được
đánh dấu public có thể được dùng bởi
bất kì các phương thức của lớp bao gồm
những lớp khác.
private
Thành viên trong một lớp A được đánh
dấu là private thì chỉ được truy cập bởi
các phương thức của lớp A.
protected
Thành viên trong lớp A được đánh dấu
là protected thì chỉ được các phương
thức bên trong lớp A và những phương
thức dẫn xuất từ lớp A truy cập.
internal
Thành viên trong lớp A được đánh dấu
là internal thì được truy cập bởi những
phương thức của bất cứ lớp nào trong
cùng khối hợp ngữ với A.
protected internal
Thành viên trong lớp A được đánh dấu
là protected internal được truy cập bởi
các phương thức của lớp A, các phương
thức của lớp dẫn xuất của A, và bất cứ
lớp nào trong cùng khối hợp ngữ của A.
Định danh: Định danh lớp chính là tên của lớp do người xây dựng chương
trình tạo ra. Các định danh cần phải được đặt tên theo đúng quy tắc (Chỉ có thể chứa kí
tự số, chữ và “_”, phân biệt chữ hoa, chữ thường và không được bắt đầu bằng số).
Lớp cơ sở: Lớp cơ sở là lớp mà đối tượng sẽ kế thừa để phát triển ta sẽ bàn sau.
Thuộc tính (trường dữ liệu): là biến dữ liệu của lớp đối tượng.
Ví dụ:
public class nguoi
{
public int tuoi;//Khai báo thuộc tính tuổi cho lớp nguoi với kiểu int
}
Phương thức (Methods): là thành phần xử lý của lớp đối tượng. Khi khai báo và
định nghĩa 1 phương thức cần xác định những thành phần sau đây:

Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
48
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
- Kiểu trả về: một phương thức có thể trả về một kiểu dữ liệu có sẵn hoặc do
người dùng định nghĩa hoặc không trả về gì cả (void).
- Tên phương thức: một định danh tuân thủ nguyên tắc đặt tên.
- Danh sách tham số: một phương thức có thể có tham số truyền vào hoặc không
o Truyền tham số theo kiểu tham trị (mặc định): giá trị của các biến trước khi
được truyền vào phương thức và sau khi ra khỏi phương thức không thay đổi.
Ví dụ:
//Khai báo phương thức
int ttong (int a, int b)
{
a=a+5;
b=b+1;
return a+b;
}
//Gọi hàm truyền tham số
int so1=5, so2=10, tong;
tong=ttong(so1,so2);
Quan sát ví dụ trên ta thấy ban đầu so1 có giá trị là 5, so2 có giá trị là 10 khi
được truyền vào trong phương thức ta thấy so1 sẽ được cộng thêm 5 và so2
được cộng thêm 1. Nhưng sau khi gọi hàm xong giá trị của so1 vẫn là 5 và so2
vẫn là 10.
o Truyền tham số theo kiểu tham chiếu với từ khóa ref và out : là kiểu truyền
tham số vào phương thức mà trong phương thức có thay đổi giá trị của biến thì
sau khi ra khỏi phương thức giá trị của biến sẽ thay đổi. Điều nay tỏ ra rất hữu
ích khi ta muốn một phương thích trả về nhiều hơn một giá trị.
Ví dụ:
//Khai báo phương thức
int ttong (ref int a, ref int b)
{
a=a+5;
b=b+1;
return a+b;
}
//Gọi hàm truyền tham số
int so1=5, so2=10, tong;
tong=ttong(so1,so2);

Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
49
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Kết quả sau khi ra khỏi phương thức ttong so1 sẽ có giá trị bằng 10, và so2 có
giá trị là 11. Từ khóa ref và out đều có thể được sử dụng trong trường hợp này,
sự khác nhau cơ bản là nếu dùng out thì không cần khởi tạo các biến trước khi
truyền vào phương thức.
o Truyền tham số kiểu mảng với từ khóa params : điều này rất hữu ích khi ta
muốn tạo ra một phương thức với số lượng tham số là một dãy số, với số
lượng không có định, tùy thuộc vào lúc gọi phương thức.
Ví dụ:
//Khai báo phương thức
public void DisplayVals( params int[] intVals)
foreach (int i inintVals)
{
Console.WriteLine(“DisplayVals: {0}”, i);
}
//Gọi phương thức
DisplayVals(1,2,6,5,4,7);
DisplayVals(2,2,1,3,4,3,5,6,6,8,9);
int[] mang = new int[5]{2,4,9,7,8};
DisplayVals(mang);
- Phần thực thi của phương thức: nội dung phương thức tùy vào mục đích sử
dụng của phương thức.
Ví dụ.
public class nguoi
{
public void hello()// Phương thức không có tham số, không trả về gì cả
{
Console.WriteLine(“Xin chao cac ban”);
}
public int tinhTuoi(int nam_sinh)// Phương thức có tham số và trả về
kiểu int {
int tuoi=2014-nam_sinh;
return tuoi;//Với phương thức có giá trị trả về cần có câu lệnh
return để xác định xem phương thức sẽ trả về cái gì.
}
}
3.1.2 Tạo đối tượng

Bài giảng Ngôn ngữ lập trình ứng dụng – Ngành Truyền thông đa phương tiện
50
Bộ môn Truyền thông đa phương tiện – Trường Đại học Công nghệ thông tin và Truyền thông
Các đối tượng là điểm cốt lõi để hiểu về công nghệ hướng đối tượng. Bây giờ
hãy nhìn xung quanh và bạn sẽ thấy được rất nhiều ví dụ về đối tượng của thế giới
thực: con chó, cái bàn, ti vi, xe đạp.
Đối tượng trong thế giới thực có chung hai đặc điểm: Tất cả đều có trạng
thái và hành vi. Chó có trạng thái (tên, màu sắc, loại, tình trạng đói hay no) và hành vi
(sủa, tha đồ vật đến, vẫy đuôi). Xe đạp cũng có trạng thái (bánh răng, nhịp bàn đạp
hiện tại, tốc độ hiện tại) và hành vi (thay đổi bánh răng, thay đổi nhịp bàn đạp, sử dụng
phanh). Việc xác định trạng thái và hành vi của các đối tượng trong thế giới thực là
một cách tuyệt vời để bắt đầu nghĩ đến các khái niệm của lập trình hướng đối tượng.
Bây giờ ta hãy dành ra một vài phút để quan sát các đối tượng của thế giới thực
xung quanh bạn. Đối với mỗi đối tượng mà bạn nhìn thấy, hãy tự đặt ra cho mình hai
câu hỏi: “Đối tượng này có thể ở trong những trạng thái nào?” và “Đối tượng này có
thể thưc hiện những hành vi nào?” Hãy chắc chắn rằng bạn đã ghi lại những quan sát
của mình. Khi làm thế, bạn sẽ nhận thấy rằng các đối tượng trong thế giới thực có sự
khác nhau về độ phức tạp; chiếc đèn bàn có thể chỉ có 2 trạng thái (đang bật và đang
tắt) và hai hành vi (bật và tắt), nhưng chiếc radio có thể có thêm các trạng thái khác
(đang bật, đang tắt, âm lượng hiện tại, kênh hiện tại) và hành vi (bật, tắt, tăng âm
lượng, giảm âm lượng, tìm kiếm, dò kênh và điều chỉnh). Bạn cũng sẽ nhận thấy rằng
một số đối tượng này có thể chứa các đối tượng khác. Những quan sát về thế giới thực
này đều được chuyển vào trong thế giới của lập trình hướng đối tượng.
Một đối tượng phần mềm.
Về mặt khái niệm thì các đối tượng phần mềm cũng tương tự như các đối tượng
trong thế giới thực: Nó cũng bao gồm các trạng thái và hành vi liên quan. Một đối
tượng lưu trữ trạng thái của nó trong các trường (có thể được gọi là biến trong một số
ngôn ngữ lập trình) và thể hiện các hành vi của mình ra bên ngoài thông qua các
phương thức (có thể được gọi là hàm ở trong một số ngôn ngữ lập trình). Các phương
thức thao tác trên các trạng thái bên trong của một đối tượng và được dùng như là cơ

