Di erence with method parameters ref and out C# with Example



Di erence with method parameters ref and out C# with Example

There are two possible ways to pass a value type by reference: ref and out. The difference is that by passing it with 
ref the value must be initialized but not when passing it with out. Using out ensures that the variable has a value 
after the method call: 
public void ByRef(ref int value) 
{ 
Console.WriteLine(nameof(ByRef) + value); 
value += 4; 
Console.WriteLine(nameof(ByRef) + value); 
} 
public void ByOut(out int value) 
{ 
value += 4 //  CS0269:  Use  of  unassigned  out  parameter  `value' 
Console.WriteLine(nameof(ByOut) + value); // CS0269: Use of unassigned out parameter `value' 
value = 4; 
Console.WriteLine(nameof(ByOut) + value); 
} 
public void TestOut() 
{ 
int outValue1; 
ByOut(out outValue1); // prints 4 
int outValue2 = 10; //  does  not  make  any  sense  for  out 
ByOut(out outValue2); // prints 4 
} 
public void TestRef() 
{ 
int refValue1; 
ByRef(ref refValue1); // S0165 Use  of  unassigned  local  variable  'refValue' 
int refValue2 = 0; 
ByRef(ref refValue2); // prints 0 and 4 
int refValue3 = 10; 
ByRef(ref refValue3); // prints 10 and 14 
} 
The catch is that by using out the parameter must be initialized before leaving the method, therefore the following 
 

method is possible with ref but not with out: 
public void EmtyRef(bool condition, ref int value) 
{ 
if (condition) 
{ 
value += 10; 
} 
} 
public void EmtyOut(bool condition, out int value) 
{ 
if (condition) 
{ 
value = 10; 
} 
} //CS0177: The out parameter 'value' must be assigned before control leaves the current method 
This is because if condition does not hold, value goes unassigned. 

0 Comment's

Comment Form

Submit Comment