What are the differences between ref and out parameters in C#?

The ref and out parameters in C# are both used to pass arguments by reference, but they have distinct behaviors and use cases. Both allow methods to modify the original variable, but they differ in initialization requirements and intended purposes.

Syntax

Following is the syntax for declaring ref parameters −

public void MethodName(ref int parameter) {
    // parameter can be read and modified
}

Following is the syntax for declaring out parameters −

public void MethodName(out int parameter) {
    // parameter must be assigned before method ends
    parameter = value;
}

Key Differences

Aspect ref Parameter out Parameter
Initialization Variable must be initialized before passing Variable need not be initialized before passing
Assignment in Method Optional to assign a new value Must assign a value before method ends
Primary Purpose Modify existing values Return multiple values from a method

ref vs out Parameter Flow ref Parameter 1. Variable initialized 2. Passed to method 3. Can read/modify 4. Changes reflected back Two-way communication out Parameter 1. Variable declared 2. Passed to method 3. Must assign value 4. Value returned Output-focused vs

Using ref Parameter

A reference parameter allows a method to modify the value of an existing variable. The variable must be initialized before passing it to the method −

Example

using System;

class NumberManipulator {
    public void swap(ref int x, ref int y) {
        int temp;
        temp = x;
        x = y;
        y = temp;
    }

    static void Main(string[] args) {
        NumberManipulator n = new NumberManipulator();
        
        int a = 100;
        int b = 200;
        
        Console.WriteLine("Before swap, value of a : {0}", a);
        Console.WriteLine("Before swap, value of b : {0}", b);
        
        n.swap(ref a, ref b);
        
        Console.WriteLine("After swap, value of a : {0}", a);
        Console.WriteLine("After swap, value of b : {0}", b);
    }
}

The output of the above code is −

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

Using out Parameter

An out parameter is primarily used to return multiple values from a method. The variable does not need to be initialized before passing, but the method must assign a value to it −

Example

using System;

class NumberManipulator {
    public void getValue(out int x) {
        int temp = 10;
        x = temp;
    }

    static void Main(string[] args) {
        NumberManipulator n = new NumberManipulator();
        
        int a = 150;
        
        Console.WriteLine("Before method call, value of a : {0}", a);
        
        n.getValue(out a);
        
        Console.WriteLine("After method call, value of a : {0}", a);
    }
}

The output of the above code is −

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

Returning Multiple Values with out

The out parameter is commonly used to return multiple values from a single method −

Example

using System;

class Calculator {
    public void Calculate(int a, int b, out int sum, out int product) {
        sum = a + b;
        product = a * b;
    }

    static void Main(string[] args) {
        Calculator calc = new Calculator();
        
        int result1, result2;
        calc.Calculate(5, 3, out result1, out result2);
        
        Console.WriteLine("Sum: {0}", result1);
        Console.WriteLine("Product: {0}", result2);
    }
}

The output of the above code is −

Sum: 8
Product: 15

Conclusion

Use ref parameters when you need to modify existing initialized variables within a method. Use out parameters when you want to return multiple values from a method or when the input value doesn't matter and you only need the output. Both pass arguments by reference, ensuring changes are reflected in the calling method.

Updated on: 2026-03-17T07:04:35+05:30

727 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements