Menu
CoddyTech

Tham số tùy chọn

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 48 trên 70.

Tham số tùy chọn cho phép bạn đặt giá trị mặc định cho các tham số của phương thức. Khi bên gọi không cung cấp giá trị cho tham số đó, chương trình sẽ tự động dùng giá trị mặc định.

Bạn tạo tham số tùy chọn bằng cách gán giá trị mặc định trong phần khai báo phương thức:

public static void Greet(string name, string greeting = "Hello")
{
    Console.WriteLine(greeting + ", " + name + "!");
}

// Cả hai lời gọi đều chạy
Greet("Alice");              // Hello, Alice!
Greet("Bob", "Welcome");     // Welcome, Bob!

Các tham số tùy chọn phải đứng sau tất cả tham số bắt buộc. Bạn có thể có nhiều tham số tùy chọn và bên gọi có thể bỏ qua bất kỳ tham số nào từ bên phải:

public static void CreateUser(string name, int age = 0, bool isActive = true)
{
    Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}

CreateUser("Emma");                    // Emma, Age: 0, Active: True
CreateUser("James", 25);               // James, Age: 25, Active: True
CreateUser("Sarah", 30, false);        // Sarah, Age: 30, Active: False

Giá trị mặc định phải là hằng số tại thời điểm biên dịch, chẳng hạn như giá trị cố định, giá trị const hoặc biểu thức default. Bạn không thể dùng biến hoặc lệnh gọi phương thức làm giá trị mặc định. Vì vậy, tham số tùy chọn rất phù hợp với các thiết lập cấu hình và phương thức mà hầu hết bên gọi đều dùng các giá trị phổ biến.

challenge icon

Thử thách

Dễ

Hãy xây dựng một hệ thống thông báo sử dụng tham số tùy chọn (optional parameters) để định dạng thông báo linh hoạt. Bạn sẽ tạo một lớp tiện ích có thể gửi thông báo với các cài đặt tùy chỉnh, trong đó hầu hết các hàm gọi sẽ dùng giá trị mặc định phù hợp.

Bạn sẽ sắp xếp code trong hai tệp:

  • NotificationService.cs: Tạo lớp NotificationService trong không gian tên Notifications, với một phương thức minh họa tham số tùy chọn:
    • SendNotification(string message, string priority = "Normal", bool addTimestamp = true) - Phương thức này sẽ trả về một chuỗi thông báo đã định dạng. Khi addTimestamp là true, hãy thêm [TIMESTAMP] vào đầu thông báo. Định dạng sẽ là [Priority] Message hoặc [TIMESTAMP] [Priority] Message, tùy theo cài đặt dấu thời gian.
  • Program.cs: Trong tệp chính, hãy minh họa cách hoạt động của tham số tùy chọn bằng cách gọi SendNotification theo ba cách khác nhau: dùng tất cả giá trị mặc định, ghi đè một tham số và ghi đè cả hai tham số tùy chọn.

Bạn sẽ nhận ba đầu vào:

  • Thông báo thứ nhất (sẽ dùng tất cả giá trị mặc định)
  • Thông báo thứ hai (sẽ dùng mức độ ưu tiên "Urgent" với dấu thời gian mặc định)
  • Thông báo thứ ba (sẽ dùng mức độ ưu tiên "Low" và không có dấu thời gian)

Gọi SendNotification ba lần và in ra từng kết quả:

  1. Lần gọi thứ nhất: chỉ truyền thông báo thứ nhất (dùng giá trị mặc định: mức độ ưu tiên "Normal", bật dấu thời gian)
  2. Lần gọi thứ hai: truyền thông báo thứ hai cùng mức độ ưu tiên "Urgent" (dấu thời gian vẫn mặc định là true)
  3. Lần gọi thứ ba: truyền thông báo thứ ba cùng mức độ ưu tiên "Low" và false cho dấu thời gian

Ví dụ, nếu đầu vào là System started, Server overload và Cache cleared, đầu ra sẽ là:

[TIMESTAMP] [Normal] System started
[TIMESTAMP] [Urgent] Server overload
[Low] Cache cleared

Hãy chú ý cách cùng một phương thức xử lý gọn gàng cả ba trường hợp: hàm gọi chỉ cần chỉ định những gì muốn thay đổi so với giá trị mặc định!

Tự làm thử

using System;
using Notifications;

class Program
{
    public static void Main(string[] args)
    {
        // Đọc ba thông báo
        string message1 = Console.ReadLine();
        string message2 = Console.ReadLine();
        string message3 = Console.ReadLine();

        // Tạo một instance của NotificationService
        NotificationService service = new NotificationService();

        // TODO: Gọi SendNotification ba lần và in ra từng kết quả:
        // 1. Lần gọi đầu tiên: chỉ truyền message1 (dùng tất cả giá trị mặc định)
        // 2. Lần gọi thứ hai: truyền message2 với mức ưu tiên "Urgent" (timestamp mặc định là true)
        // 3. Lần gọi thứ ba: truyền message3 với mức ưu tiên "Low" và false cho timestamp

    }
}
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