Menu
CoddyTech

Trường và phương thức tĩnh

Thuộc phần Lập trình hướng đối tượng trong hành trình C# của Coddy. Bài học 12 trên 70.

Đến giờ, mọi thuộc tính và phương thức mà chúng ta tạo đều thuộc về từng đối tượng riêng lẻ. Nhưng đôi khi, bạn cần dữ liệu hoặc hành vi thuộc về chính lớp và được chia sẻ giữa mọi instance. Đó là lúc từ khóa static phát huy tác dụng.

Trường tĩnh được dùng chung bởi tất cả đối tượng của một lớp. Chỉ có một bản sao duy nhất, bất kể bạn tạo bao nhiêu instance:

public class Player
{
    public static int TotalPlayers = 0;
    public string Name { get; set; }
    
    public Player(string name)
    {
        Name = name;
        TotalPlayers++;
    }
}

Mỗi khi tạo một Player mới, TotalPlayers tăng lên. Tất cả người chơi dùng chung bộ đếm này.

Một phương thức tĩnh (static method) thuộc về lớp (class) và bạn có thể gọi mà không cần tạo đối tượng (object):

public class Calculator
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

// Gọi trên lớp (class), không phải trên instance
int result = Calculator.Add(5, 3);

Lưu ý rằng bạn truy cập các thành viên tĩnh (static member) bằng tên lớp, không phải bằng tham chiếu đến đối tượng. Phương thức tĩnh (static method) không thể truy cập các trường của instance hoặc dùng this, vì chúng không thuộc về một đối tượng cụ thể nào.

Bạn đã dùng các thành viên tĩnh (static members) mà không nhận ra. Console.WriteLine() là một phương thức tĩnh (static method), còn Math.PI là một trường tĩnh (static field).

challenge icon

Thử thách

Dễ

Hãy xây dựng một hệ thống theo dõi đơn hàng sử dụng các thành viên tĩnh để theo dõi tất cả đơn hàng được tạo trong ứng dụng của bạn.

Bạn sẽ tạo hai tệp để sắp xếp code:

  • Order.cs: Định nghĩa lớp Order trong không gian tên OrderSystem. Mỗi đơn hàng cần có thuộc tính của instance OrderId (int) và CustomerName (string). Lớp cũng cần theo dõi tổng số đơn hàng đã tạo bằng trường tĩnh TotalOrders, đồng thời cung cấp phương thức tĩnh GetNextOrderId() để trả về mã đơn hàng khả dụng tiếp theo, bắt đầu từ 1. Hàm khởi tạo cần nhận tên khách hàng, tự động gán mã đơn hàng bằng phương thức tĩnh và tăng tổng số đơn hàng.
  • Program.cs: Trong tệp chính, hãy tạo đơn hàng dựa trên đầu vào và hiển thị thông tin chi tiết của chúng cùng với tổng số đơn hàng.

Bạn sẽ nhận được hai đầu vào là tên khách hàng của hai đơn hàng riêng biệt.

Với mỗi đơn hàng, hãy in thông tin chi tiết theo định dạng sau:

Order #{OrderId} - Customer: {CustomerName}

Sau khi tạo cả hai đơn hàng, hãy in tổng số đơn hàng:

Total Orders: {TotalOrders}

Ví dụ, nếu đầu vào là Alice và Bob, đầu ra sẽ là:

Order #1 - Customer: Alice
Order #2 - Customer: Bob
Total Orders: 2

Tự làm thử

using System;
using OrderSystem;

class Program
{
    public static void Main(string[] args)
    {
        // Đọc tên khách hàng
        string customer1 = Console.ReadLine();
        string customer2 = Console.ReadLine();

        // TODO: Tạo hai đối tượng Order với tên khách hàng

        // TODO: In ra thông tin chi tiết của từng đơn hàng theo định dạng:
        // Order #{OrderId} - Customer: {CustomerName}

        // TODO: In ra tổng số đơn hàng theo định dạng:
        // Total Orders: {TotalOrders}
    }
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch C# online