VieTopik
Thư việnLuyện thiGóc học tậpĐánh dấu
Tải app
  • Thư viện
  • Luyện thi
  • Góc học tập
  • Đánh dấu
C# Core

Bài 6/7

Method

5 phút đọc

Nội dung bài

  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Thử ngay
  4. 4.Lỗi hay gặp
  5. 5.Tóm tắt

Công thức tính tiền đơn hàng được dùng ở trang giỏ hàng, trang thanh toán và hoá đơn. Chép công thức ra ba nơi thì lúc sửa phải nhớ sửa cả ba. Method giúp bạn viết một lần, đặt tên, rồi gọi ở bất cứ đâu.

Khái niệm

🛠️ Method: một khối code có tên, nhận đầu vào và có thể trả về kết quả, gọi được nhiều lần.

📥 Tham số (parameter): biến khai báo trong ngoặc của method, nhận giá trị được truyền vào lúc gọi.

📤 Giá trị trả về (return value): kết quả method gửi lại cho nơi gọi, bằng từ khoá return.

Ví dụ

decimal total = CalculateTotal(5000m, 3);
Console.WriteLine(total);   // 15000

PrintLine("Cảm ơn quý khách");

decimal CalculateTotal(decimal price, int quantity)
{
    return price * quantity;
}

void PrintLine(string message)
{
    Console.WriteLine("--- " + message + " ---");
}

Một method gồm bốn phần: decimal CalculateTotal(decimal price, int quantity).

  • decimal: kiểu của giá trị trả về.
  • CalculateTotal: tên method, viết hoa chữ cái đầu, thường là động từ.
  • (decimal price, int quantity): danh sách tham số.
  • { ... }: thân method, return gửi kết quả về và kết thúc method.

Method không trả về gì thì dùng void, như PrintLine.

Thử ngay

Dán vào Program.cs rồi chạy dotnet run:

decimal price = 100000m;
decimal result = ApplyDiscount(price, 10);

Console.WriteLine(price);
Console.WriteLine(result);

decimal ApplyDiscount(decimal amount, int percent)
{
    amount = amount - amount * percent / 100;
    return amount;
}

Đoán trước khi chạy: method đã sửa amount. Vậy biến price bên ngoài có bị đổi thành 90000 không?

Xem kết quả
100000
90000

Không đổi. Lúc gọi, giá trị của price được chép vào tham số amount. Method sửa bản chép, còn price giữ nguyên.

Lỗi hay gặp

Thiếu return. Method khai báo có kiểu trả về thì mọi nhánh đều phải return.

// SAI — lỗi compile: nhánh else không trả về gì
Console.WriteLine(ShippingFee(100000m));

decimal ShippingFee(decimal total)
{
    if (total >= 500000)
    {
        return 0;
    }
}
// ĐÚNG
Console.WriteLine(ShippingFee(100000m));   // 30000

decimal ShippingFee(decimal total)
{
    if (total >= 500000)
    {
        return 0;
    }
    return 30000;
}

Lấy kết quả từ method void. Method void không trả về gì để gán.

// SAI — lỗi compile: PrintLine không trả về giá trị
var text = PrintLine("Xin chào");

void PrintLine(string message)
{
    Console.WriteLine(message);
}
// ĐÚNG — chỉ gọi, không gán
PrintLine("Xin chào");

void PrintLine(string message)
{
    Console.WriteLine(message);
}

Tóm tắt

  • Method là khối code có tên, viết một lần và gọi nhiều lần.
  • Khai báo: kiểu_trả_về Tên(tham số) { ... }.
  • return gửi kết quả về, void nghĩa là không trả về gì.
  • Tham số nhận bản chép của giá trị truyền vào, sửa tham số không đổi biến bên ngoài.

Tự kiểm tra

0/3 câu
Câu 1

Method int Square(int n) { return n * n; } Gọi Console.WriteLine(Square(4) + 1); in ra gì?

Câu 2

Method nào nên khai báo void?

Câu 3

int count = 5; AddOne(count); Console.WriteLine(count); với void AddOne(int n) { n = n + 1; }. In ra gì?

Vòng lặpClass và object