---
title: "Difference between ref and out keywords in C#"  
description: "Difference between ref and out keywords in C#"  
author: "Niraj Kumar Mishra"  
published: 2017-08-28  
updated: 2020-09-19  
canonical: https://www.mindstick.com/interview/23293/difference-between-ref-and-out-keywords-in-c-sharp  
category: "c#"  
tags: ["c#"]  
reading_time: 2 minutes  

---

# Difference between ref and out keywords in C#

ref and out both allow the called method to modify a parameter. The difference between them is what happens before you make the call.

- ref means that the parameter has a value on it before going into the function.
- out means that the parameter has no official value before going into the function.

**Example:**

```
using System;public class Example{   public static void Main() //calling method   {       int val1 = 0; //must be initialized        int val2; //optional       Example1(ref val1);       Console.WriteLine("Result of Ref keywordis=>"+val1);// val1=1       Example2(out val2);       Console.WriteLine("Result of out keywordis=>"+val2);// val2=2       Console.ReadKey();   }    static void Example1(ref int value) //called method   {       value = 1;   }   static void Example2(out int value) //called method   {       value = 2; //must be initialized    }}
```

then it produce the following result:![Difference between ref and out keywords in C#](data:image/png;base64,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)\
if you not initialize the val1 with any value then your code not compile.Error:Use of unassigned local variable 'val1'\
\
\
\
\

## Answers

### Answer by Niraj Kumar Mishra

ref and out both allow the called method to modify a parameter. The difference between them is what happens before you make the call.

- ref means that the parameter has a value on it before going into the function.
- out means that the parameter has no official value before going into the function.

**Example:**

```
using System;public class Example{   public static void Main() //calling method   {       int val1 = 0; //must be initialized        int val2; //optional       Example1(ref val1);       Console.WriteLine("Result of Ref keywordis=>"+val1);// val1=1       Example2(out val2);       Console.WriteLine("Result of out keywordis=>"+val2);// val2=2       Console.ReadKey();   }    static void Example1(ref int value) //called method   {       value = 1;   }   static void Example2(out int value) //called method   {       value = 2; //must be initialized    }}
```

then it produce the following result:![Difference between ref and out keywords in C#](data:image/png;base64,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)\
if you not initialize the val1 with any value then your code not compile.Error:Use of unassigned local variable 'val1'\
\
\
\
\


---

Original Source: https://www.mindstick.com/interview/23293/difference-between-ref-and-out-keywords-in-c-sharp

Copyright © MindStick Software Pvt. Ltd. This Markdown version is provided for developers, AI systems, and offline reading.
