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

Khác biệt giữa tham số ref và out trong C#

Tham số Ref (Ref Parameter)

Tham số tham chiếu (reference parameter) là tham chiếu đến vị trí bộ nhớ của biến. Khi truyền tham số bằng tham chiếu, khác với tham trị, KHÔNG tạo vị trí lưu trữ mới cho tham số này.

Khai báo tham số tham chiếu dùng từ khóa ref. Ví dụ:

Ví dụ

using System; 
namespace CalculatorApplication { 
    class NumberManipulator { 
        public void swap(ref int x, ref int y) { 
            int temp; 
            temp = x; /* save the value of x */ 
            x = y; /* put y into x */ 
            y = temp; /* put temp into y */ 
        } 
        static void Main(string[] args) { 
            NumberManipulator n = new NumberManipulator(); 
            /* local variable definition */ 
            int a = 100; 
            int b = 200; 
            Console.WriteLine("Before swap, value of a : {0}", a); 
            Console.WriteLine("Before swap, value of b : {0}", b); 
            /* calling a function to swap the values */ 
            n.swap(ref a, ref b); 
            Console.WriteLine("After swap, value of a : {0}", a); 
            Console.WriteLine("After swap, value of b : {0}", b); 
            Console.ReadLine(); 
        } 
    } 
}

Kết quả

Before swap, value of a : 100
Before swap, value of b : 200
After swap, value of a : 200
After swap, value of b : 100

Tham số Out (Out Parameter)

Return statement chỉ trả về một giá trị từ hàm. Tuy nhiên, dùng out parameter có thể trả về hai giá trị từ hàm.

Ví dụ:

Ví dụ

using System; 
namespace CalculatorApplication { 
    class NumberManipulator { 
        public void getValue(out int x) { 
            int temp = 10; 
            x = temp; 
        } 
        static void Main(string[] args) { 
            NumberManipulator n = new NumberManipulator(); 
            /* local variable definition */ 
            int a = 150; 
            Console.WriteLine("Before method call, value of a : {0}", a); 
            /* calling a function to get the value */ 
            n.getValue(out a); 
            Console.WriteLine("After method call, value of a : {0}", a); 
            Console.ReadLine(); 
        } 
    } 
}

Kết quả

Before method call, value of a : 150
After method call, value of a : 10