CodeGym /Các khóa học /C# SELF /Trường static và phương thức static

Trường static và phương thức static

C# SELF
Mức độ, Bài học
Có sẵn

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
}
Ví dụ khai bá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ủ.");
    }
}
Ví dụ về phương thức của object

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
Ví dụ sử dụng trường static

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;
    }
}
Ví dụ phương thức static

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
public string Name;
Trong mỗi object Dữ liệu cá nhân của object cat1.Name, cat2.Name
Phương thức của object
public void Meow(){}
Trong mỗi object Hành động dùng trường của object cat1.Meow()
Trường static
public static int C;
Một cái cho cả class Dữ liệu chung cho tất cả object Cat.C
Phương thức static
public 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.

2
Nhiệm vụ
C# SELF, mức độ, bài học
Đã khóa
Trường tĩnh để đếm số lượng đối tượng
Trường tĩnh để đếm số lượng đối tượng
2
Nhiệm vụ
C# SELF, mức độ, bài học
Đã khóa
Phương thức static để kiểm tra số
Phương thức static để kiểm tra số
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION