Lớp (Class) Trong C# – Nguyễn Anh Tuấn
Có thể bạn quan tâm
Class trong hướng đối tượng là tập hợp các đối tượng có cùng chung đặc điểm, hành vi, phương thức hoạt đột. Class trong C# chính là cách thể hiện khái niệm về lớp trong lập trình hướng đối tượng.
Như hình ảnh trên, bạn có thể thấy Person chính là class. Còn Thomas Edison hay Bill Gates chính là instance (thể hiện) của Class Person.
Một class trong C# có các thành phần như:
- Thuộc tính: là các thành phần dữ liệu hay còn gọi là các biến.
- Phương thức: là các hàm thành phần thể hiện các hành vi của một đối tượng thuộc lớp.
- Phương thức khởi tạo.
- Phương thức huỷ bỏ.
Class trong C# thực chất là một kiểu dữ liệu mới do người dùng tự định nghĩa.
Định nghĩa một Class trong C#
Một định nghĩa lớp trong C# bắt đầu với từ khóa class được theo sau bởi tên lớp; và phần thân lớp được bao quanh bởi các dấu ngoặc ôm. Dưới đây là form chung của một định nghĩa lớp trong C#:
<access specifier> class tên_lớp{ // các biến thành viên <access specifier> <kiểu_dữ_liệu> biến1; <access specifier> <kiểu_dữ_liệu> biến2; … <access specifier> <kiểu_dữ_liệu> biếnN; // các phương thức thành viên <access specifier> <kiểu_trả_về> tên_phương_thức1(danh_sách_tham_số) { // phần thân phương thức } <access specifier> <kiểu_trả_về> tên_phương_thức2(danh_sách_tham_số) { // phần thân phương thức } … <access specifier> <kiểu_trả_về> tên_phương_thứcN(danh_sách_tham_số) { // phần thân phương thức }}
Ghi chú:
- Access specifier xác định các qui tắc truy cập cho các thành viên cũng như chính lớp đó. Nếu không được đề cập, thì Access Specifier mặc định cho một kiểu lớp là internal. Chế độ truy cập mặc định cho các thành viên là private.
- kiểu_dữ_liệu xác định kiểu biến, và trả về kiểu dữ liệu mà phương thức trả về.
- Để truy cập các thành viên lớp, bạn sử dụng toán tử dot (.).
- Toán tử dot (.) liên kết với tên của một đối tượng với tên của một thành viên.
Khởi tạo
Bạn có thể khởi tạo 1 đối tượng thuộc lớp thông qua toán tử new.
Person thomas = new Person();
Chú ý: Class là kiểu dữ liệu tham chiếu vì thế đối tượng dữ liệu thực sự được lưu trên heap.
Sử dụng
Về cơ bản thì class được sử dụng tương tự như struct. Để gọi đến các thuộc tính bên trong lớp:
<tên đối tượng>. <tên thuộc tính>;
Để gọi đến các phương thức bên trong lớp:
<tên đối tượng> . <tên phương thức> (<danh sách tham số nếu có>);
Phương thức khởi tạo
Phương thức khởi tạo (Constructor) là những phương thức đặc biệt được gọi đến ngay khi khởi tạo 1 đối tượng nào đó.
Đặc điểm:
- Có tên trùng với tên lớp.
- Không có kiểu trả về.
- Được tự động gọi khi 1 đối tượng thuộc lớp được khởi tạo.
- Nếu như bạn không khai báo bất kỳ phương thức khởi tạo nào thì hệ thống sẽ tự tạo ra phương thức khởi tạo mặc định không đối số và không có nội dung gì.
- Có thể có nhiều constructor bên trong 1 lớp.
Có 2 loại phương thức khởi tạo:
- Phương thức khởi tạo không đối số:
- là phương thức khởi tạo không có bất kỳ tham số truyền vào nào.
- Thường dùng để khởi tạo các giá trị mặc định cho các thuộc tính bên trong class khi khởi tạo đối tượng (giá trị mặc định này do người lập trình quyết định).
- Phương thức khởi tạo có đối số:
- là phương thức khởi tạo có tham số truyền vào. Và khi khởi tạo đối tượng để phương thức này được gọi ta cần truyền đầy đủ các tham số.
- Thường dùng để khởi tạo các giá trị cho các thuộc thuộc tính bên trong class khi khởi tạo đối tượng (các giá trị này do người khởi tạo đối tượng truyền vào).
Đây là hình ảnh minh họa các trường (field) của lớp được gán giá trị thế nào, khi bạn tạo một đối tượng từ Constructor.
Lưu ý:
- Khi 1 đối tượng được khởi tạo chỉ có 1 constructor phù hợp nhất được gọi cho dù trong lớp có nhiều constructor.
- Qua ví dụ bạn có thể thấy cách ta truyền tham số khi khởi tạo đối tượng sẽ gian tiếp ám chỉ constructor nào được gọi vì thế bạn cần truyền đúng và truyền đủ các tham số để C# có thể gọi đúng constructor như ý muốn.
- Các tham số của constructor thường sẽ mang các giá trị tương ứng cho các thuộc tính bên trong lớp vì thế bạn nên:
- Khai báo chúng có cùng kiểu dữ liệu với thuộc tính tương ứng.
- Đặt tên chúng gợi nhớ đến thuộc tính tương ứng để tránh nhầm lẫn.
- Không nên khai báo dư tham số sẽ dẫn đến khó hiểu cho người dùng.
Phương thức huỷ bỏ
Phương thức huỷ bỏ (destructor) là phương thức đặc biệt được gọi đến trước khi 1 đối tượng bị thu hồi.
Đặc điểm:
- Có tên trùng với tên lớp nhưng để phân biệt với constructor thì ta thêm dấu “~” vào trước tên lớp.
- Không có kiểu trả về.
- Được tự động gọi khi 1 đối tượng thuộc lớp kết thúc “vòng đời” của nó thông qua bộ thu dọn rác tự động GC (Garbage Collection).
- Nếu bạn không khai báo destructor thì C# sẽ tự động tạo ra 1 destructor mặc định và không có nội dung gì.
- Chỉ có 1 destructor duy nhất trong 1 lớp.
Vì bộ GC của C# có cơ chế tự động phát hiện đối tượng không còn được sử dụng nữa và thực hiện thu hồi vùng nhớ của nó nên bạn không cần phải viết tường minh việc huỷ vùng nhớ của nó. Việc bạn có thể làm viết những thứ bạn muốn làm khi đối tượng bị huỷ vào đây thôi!
So sánh giữa Struct và ClassNhìn chung struct và class có khá nhiều điểm chung nhưng class có phần mạnh hơn. Hãy còn xem tại sao class lại mạnh hơn và mạnh hơn ở điểm nào nhé!
| Struct | Class |
| Kiểu tham trị | Kiểu tham chiếu |
| Không có destructor | Có destructor |
| Không thể khai báo phương thức khởi tạo mặc định (không đối số) | Có thể khai báo phương thức khởi tạo mặc định |
| Không có khả năng kế thừa | Có thể kế thừa |
Ngoài ra nếu 1 class là tham số truyền vào thì mọi thay đổi bên trong hàm sẽ tự động cập nhật ra bên ngoài cho dù không có từ khoá out hoặc ref còn struct thì không.
Thành viên Static của một Class trong C#
Chúng ta có thể định nghĩa các thành viên lớp là static bởi sử dụng từ khóa static trong C#. Khi chúng ta khai báo một thành viên lớp là static, nghĩa là, dù cho có bao nhiêu đối tượng của lớp được tạo, thì chỉ có một bản sao của thành viên static.
Từ khóa static ngụ ý rằng chỉ có một instance (sự thể hiện) của thành viên tồn tại cho một lớp đó. Các biến static được sử dụng để định nghĩa các hằng số (constant) bởi vì giá trị của chúng có thể được thu nhận bằng việc gọi lớp đó mà không cần tạo một instance của nó. Các biến static có thể được khởi tạo bên ngoài hàm thành viên hoặc định nghĩa lớp. Bạn cũng có thể khởi tạo các biến static bên trong định nghĩa lớp.
Ví dụ sau minh họa cách sử dụng của các biến static trong C#: tạo hai class có tên lần lượt là ThanhVienStatic và TestCsharp như sau:
Lớp ThanhVienStatic: chứa thành viên static và các phương thức
Lớp TestCsharp: chứa phương thức main() để thao tác trên đối tượng ThanhVienStatic này

Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:

Bạn cũng có thể khai báo một hàm thành viên là static. Những hàm này chỉ có thể truy cập các biến static. Hàm static có thể tồn tại trước cả khi đối tượng được tạo. Ví dụ sau minh họa cách sử dụng của hàm static trong C#: ở trên bạn đã tạo hai lớp này rồi, bây giờ chỉ cần thay đổi phần code của hai lớp một chút như sau:
Lớp ThanhVienStatic: chứa thành viên static và các phương thức static

Lớp TestCsharp: chứa phương thức main() để thao tác trên đối tượng ThanhVienStatic này

Share this:
- X
Related
Từ khóa » Class Trong C# Là Gì
-
Class Trong C#, Căn Bản Về Lập Trình Hướng đối Tượng
-
Class Trong Lập Trình Hướng đối Tượng | How Kteam
-
Class Trong C# | Comdy
-
Lớp (Class) Trong C# | 85 Bài Học Lập Trình C# Hay Nhất
-
Sử Dụng Lớp Thuộc Tính Trong C# Tạo Và Sử Dụng đối Tượng Lớp
-
Lớp Và đối Tượng Trong C# - Học Lập Trình C# Online - VietTuts
-
Kiểu Class Trong Lập Trình C# - Minh Hoàng Blog
-
Tìm Hiểu Về Lớp Và đối Tượng Trong C# - Freetuts
-
Lớp Và đối Tượng Trong C#, Cách Khai Báo Và Ví Dụ - Thủ Thuật
-
Tự Học Ngôn Ngữ Lập Trình C# (C Sharp) Từ Cơ Bản đến Nâng Cao
-
Các Hiểu Biết Cơ Bản Về C# - Viblo
-
Partial Class Là Gì ? Sử Dụng Partial Class Trong C# - Khóa Học Tester
-
Đối Tượng Và Lớp Trong C# - Quản Trị Máy Tính
-
Cơ Bản Về Class Trong C++ | TopDev