1. Trường của object: nơi object lưu dữ liệu riêng
Trong C# (và hầu hết các ngôn ngữ lập trình), người ta hay nói: “mọi thứ đều là object”. Object là một “đồ vật ảo” trong bộ nhớ máy tính, nó có thể lưu cái gì đó (dữ liệu) và làm được cái gì đó (phương thức). Nói cách khác, object có trạng thái (trường, dữ liệu) và hành vi (phương thức).
Ví dụ về object:
- Mèo trong game (Cat)
- Người dùng website (User)
- Sách trong thư viện (Book)
- Xe trong bãi đỗ (Car)
Khi bạn tạo một object — giống như bạn tạo bản sao từ mẫu (class), và bản sao này có thể làm việc với dữ liệu riêng của nó.
Trường — là biến nằm “bên trong” object và lưu dữ liệu cá nhân của nó.
Ví dụ thực tế
Mỗi con mèo đều có tên, tuổi, màu lông. Những dữ liệu này là riêng biệt — mỗi con mèo có cái riêng của nó.
public class Cat
{
public string Name; // Tên mèo — trường của object
public int Age; // Tuổi mèo — trường của object
public string Color; // Màu mèo — trường của object
}
Khi chúng ta tạo object:
Cat cat1 = new Cat();
cat1.Name = "Barsik";
cat1.Age = 2;
cat1.Color = "xám";
Cat cat2 = new Cat();
cat2.Name = "Murka";
cat2.Age = 5;
cat2.Color = "đen";
Mỗi object có giá trị trường riêng của nó!
| Object | Name | Age | Color |
|---|---|---|---|
| cat1 | Barsik | 2 | xám |
| cat2 | Murka | 5 | đen |
Trường — là “túi” bên trong object, nơi nó có thể cất giữ cái gì đó.
2. Phương thức của object: object làm được gì
Phương thức — là “hành động”, “kỹ năng” hoặc “hàm” của object. Phương thức là một đoạn code mà bạn có thể “gọi” trên object.
Ví dụ thực tế
Mèo có các hành động: nó có thể kêu meo meo, chạy, ăn.
public class Cat
{
public string Name;
public void Meow()
{
Console.WriteLine($"{Name} nói: Meo!");
}
public void Sleep()
{
Console.WriteLine($"{Name} đang ngủ.");
}
}
Sử dụng:
Cat cat1 = new Cat();
cat1.Name = "Barsik";
cat1.Meow(); // Barsik nói: Meo!
cat1.Sleep(); // Barsik đang ngủ.
Mỗi object có phương thức riêng, và chúng dùng trường cá nhân của nó!
3. Trường static (static fields): dữ liệu chung
Đôi khi bạn muốn lưu ở trường không phải dữ liệu cá nhân của object, mà là thông tin chung cho cả class. Ví dụ, đếm tổng số mèo đã tạo, hoặc đặt “âm lượng tối đa” chung cho tất cả mèo.
Để làm điều này trong C#, dùng trường static — khai báo với từ khóa static.
public class Cat
{
public string Name;
public static int Count = 0; // Trường static
public Cat(string name)
{
Name = name;
Count++; // Tăng bộ đếm tổng số mèo
}
}
//làm việc với class Cat
Cat c1 = new Cat("Barsik");
Cat c2 = new Cat("Murka");
Console.WriteLine(Cat.Count); // 2 — chung cho tất cả object
Trường static là một cái chung cho cả class, tất cả object “chia sẻ” nó.
Truy cập nó thường qua tên class: Cat.Count.
4. Phương thức static (static methods)
Phương thức static — là phương thức không gắn với object cụ thể nào, mà thuộc về cả class.
- Phương thức này có thể gọi mà không cần tạo object.
- Bên trong phương thức static không thể truy cập trường và phương thức thông thường (không static) — vì không có object cụ thể!
public class MathUtils
{
public static int Add(int a, int b)
{
return a + b;
}
}
Sử dụng:
int sum = MathUtils.Add(2, 3); // 5
Phương thức static thường dùng cho utility — hàm không phụ thuộc trạng thái object.
Bạn đã quen với nhiều phương thức static rồi:
Console.WriteLine();
Console.ReadLine();
Math.Round();
Math.Truncate();
5. So sánh phương thức và trường
| Là gì? | Khai báo thế nào? | Lưu ở đâu? | Dùng để làm gì? | Truy cập ra sao? |
|---|---|---|---|---|
| Trường của object | |
Trong mỗi object | Dữ liệu cá nhân của object | cat1.Name, cat2.Name |
| Phương thức của object | |
Trong mỗi object | Hành động dùng trường của object | cat1.Meow() |
| Trường static | |
Một cái cho cả class | Dữ liệu chung cho tất cả object | Cat.C |
| Phương thức static | |
Một cái cho cả class | “Kỹ năng” chung, không phụ thuộc object | Cat.Method() |
7. Minh họa
Trường và phương thức thông thường:
. +-----------------+
cat1: | Name = "Barsik" |
| Age = 2 |
+-----------------+
+------------------+
cat2: | Name = "Murka" |
| Age = 5 |
+------------------+
Trường static Count:
Cat.Count = 2 // một cái chung cho tất cả mèo
Gọi phương thức:
cat1.Meow(); // Barsik nói: Meo!
cat2.Meow(); // Murka nói: Meo!
Gọi phương thức static:
MathUtils.Add(2, 3); // 5
Tóm tắt
- Trường — chịu trách nhiệm cho đặc điểm cá nhân của mỗi object (property).
- Phương thức — mô tả object làm được gì.
- Trường static — phù hợp để lưu “dữ liệu chung” (ví dụ: bộ đếm, cài đặt toàn cục).
- Phương thức static — dùng cho thao tác không phụ thuộc object cụ thể (ví dụ: hàm toán học).
8. Câu hỏi thường gặp
Có thể truy cập trường static qua object không?
Về mặt kỹ thuật — được (cat1.Count), nhưng nên truy cập qua class (Cat.Count) để không gây nhầm lẫn cho mình và người khác.
Có thể gọi phương thức không static mà không tạo object không?
Không, vì phương thức đó luôn làm việc với object cụ thể và dữ liệu của nó.
Có thể dùng trường và phương thức thông thường trong phương thức static không?
Không — vì phương thức static không biết phải truy cập object nào.
Có thể tạo class “hoàn toàn static” không?
Có, dùng static class — không thể tạo object bằng new, và tất cả thành viên của class đó phải là static.
GO TO FULL VERSION