Computer >> Máy Tính >  >> Lập trình >> C#

Sự khác biệt giữa các tham số ref và out trong C # là gì?

Tham số Tham chiếu

Tham số tham chiếu là tham chiếu đến vị trí bộ nhớ của một biến. Khi bạn chuyển các tham số bằng tham chiếu, không giống như tham số giá trị, vị trí lưu trữ mới không được tạo cho các tham số này.

Bạn có thể khai báo các tham số tham chiếu bằng từ khóa ref. Sau đây là một 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();
      }
   }
}

Đầu ra

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

Một câu lệnh trả về chỉ có thể được sử dụng để trả về một giá trị từ một hàm. Tuy nhiên, sử dụng tham số out, bạn có thể trả về hai giá trị từ một hàm.

Sau đây là một 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();
      }
   }
}

Đầu ra

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