Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Truyền tham số bằng giá trị (by value) trong C#


Đây là cơ chế mặc định để truyền tham số cho phương thức. Khi phương thức được gọi, một vị trí bộ nhớ mới được tạo cho mỗi tham số giá trị. Giá trị của tham số thực tế được sao chép vào đó. Do đó, thay đổi tham số bên trong phương thức không ảnh hưởng đến đối số gốc.

Ví dụ

using System;

namespace CalculatorApplication
{
    class NumberManipulator
    {
        public void Swap(int x, int y)
        {
            int temp;
            temp = x; // lưu x
            x = y;    // gán y vào x
            y = temp; // gán temp vào y
            // Chỉ hoán đổi bản sao cục bộ
        }
        
        static void Main(string[] args)
        {
            NumberManipulator n = new NumberManipulator();
            int a = 100;
            int b = 200;
            
            Console.WriteLine("Trước hoán đổi, a = {0}", a);
            Console.WriteLine("Trước hoán đổi, b = {0}", b);
            
            n.Swap(a, b); // Truyền bằng giá trị
            
            Console.WriteLine("Sau hoán đổi, a = {0}", a);
            Console.WriteLine("Sau hoán đổi, b = {0}", b);
            Console.ReadLine();
        }
    }
}

Kết quả

Trước hoán đổi, a = 100
Trước hoán đổi, b = 200
Sau hoán đổi, a = 100
Sau hoán đổi, b = 200

Giải thích

  • a và b giữ nguyên giá trị sau khi gọi Swap
  • Bên trong Swap, x và y là bản sao của a và b
  • Hoán đổi chỉ xảy ra trên bản sao

Khi nào dùng by value?

  • Kiểu giá trị đơn giản (int, double, bool, struct nhỏ)
  • Không muốn phương thức thay đổi giá trị gốc
  • Mặc định an toàn, dễ hiểu

Lưu ý: Với reference type (class, array, string), truyền by value nghĩa là sao chép tham chiếu - vẫn có thể sửa đổi đối tượng được tham chiếu, nhưng không thể thay đổi tham chiếu trỏ đến đối tượng mới.