Bài 7/7
Class và object
4 phút đọc
Tới giờ bạn mới dùng các kiểu có sẵn như int, string, List<T>. Nhưng
một sản phẩm trong cửa hàng có cả tên, giá và cách tính tiền, không kiểu có
sẵn nào chứa hết được. Bài này hướng dẫn bạn tự tạo kiểu riêng bằng class.
Khái niệm
📐 Class: kiểu dữ liệu do bạn tự định nghĩa, gom dữ liệu và hành vi liên quan vào một chỗ.
📦 Object: một giá trị cụ thể được tạo ra từ class bằng từ khoá new.
🏷️ Field: biến khai báo bên trong class, mỗi object giữ một bản riêng.
Class chỉ là phần mô tả. Muốn dùng thì phải tạo object từ nó, và một class tạo được bao nhiêu object cũng được.
Ví dụ
var pen = new Product();
pen.Name = "Bút bi";
pen.Price = 5000;
Console.WriteLine(pen.TotalFor(2)); // 10000
class Product
{
public string Name = ""; // mặc định là chuỗi rỗng
public decimal Price;
public decimal TotalFor(int quantity)
{
return Price * quantity;
}
}class Productkhai báo hai field (Name,Price) và một method (TotalFor).new Product()tạo một object, biếnpengiữ object đó.- Dấu chấm truy cập field và method của object:
pen.Price,pen.TotalFor(2). Bên trongTotalFor,Pricechính là giá củapen.
Thử ngay
Chép ví dụ trên vào Program.cs, thay bốn dòng đầu bằng đoạn sau rồi chạy
dotnet run:
var pen = new Product();
pen.Name = "Bút bi";
pen.Price = 5000;
var notebook = new Product();
notebook.Name = "Vở";
notebook.Price = 12000;
pen.Price = 6000;
Console.WriteLine($"{pen.Name}: {pen.Price}");
Console.WriteLine($"{notebook.Name}: {notebook.Price}");Đoán trước khi chạy: đổi giá pen thành 6000 thì giá notebook có đổi
theo không?
Xem kết quả
Bút bi: 6000
Vở: 12000Không đổi. pen và notebook là hai object riêng, mỗi object giữ Price của
mình.
Lỗi hay gặp
Khai báo biến nhưng quên new. Biến chưa trỏ tới object nào nên không
dùng được.
// SAI — lỗi compile: biến chưa được gán
Product pen;
pen.Price = 5000;// ĐÚNG — tạo object trước rồi mới dùng
var pen = new Product();
pen.Price = 5000;Tóm tắt
- Class mô tả dữ liệu (field) và hành vi (method).
newtạo object từ class, mỗi object giữ field riêng.- Dấu chấm truy cập field và method:
pen.Price,pen.TotalFor(2).
Tự kiểm tra
0/3 câuClass Customer có field public string Name = "". Chạy: var a = new Customer(); var b = new Customer(); a.Name = "An"; Console.WriteLine(b.Name); In ra gì?
Trong dòng var cart = new Cart(); thì Cart và cart lần lượt là gì?
Field khác biến khai báo bên trong method ở điểm nào?