C# Out

Out keyword

Out signifies a reference parameter. Sometimes methods must return more than one value and not store class state. Out fills these requirements. With it we pass parameters whose changes are realized in their calling methods.

Keywords

Example

Framework: NET

The .NET Framework provides robust support for creating object-oriented logic that concentrates on storing multiple values as fields in classes. But it also provides a way to return many values from a method without using objects.

Return

The out-keyword describes parameters whose actual variable locations are copied onto the stack of the called method, where those same locations can be rewritten. This means that the calling method will access the changed parameter.

C# program that uses out Boolean parameters

using System;

class Program
{
    static void Main()
    {
	bool period; // Used as out parameter
	bool comma;
	bool semicolon;
	const string value = "has period, comma."; // Used as input string

	TestString(value, out period, out comma, out semicolon);

	Console.WriteLine(value); // Display value
	Console.Write("period: "); // Display labels and bools
	Console.WriteLine(period);
	Console.Write("comma: ");
	Console.WriteLine(comma);
	Console.Write("semicolon: ");
	Console.WriteLine(semicolon);
    }

    static void TestString(string value, out bool period, out bool comma, out bool semicolon)
    {
	period = comma = semicolon = false; // Assign all out parameters to false

	for (int i = 0; i < value.Length; i++)
	{
	    switch (value[i])
	    {
		case '.':
		    {
			period = true; // Set out parameter
			break;
		    }
		case ',':
		    {
			comma = true; // Set out parameter
			break;
		    }
		case ';':
		    {
			semicolon = true; // Set out parameter
			break;
		    }
	    }
	}
    }
}

Output

has period, comma.
period: True
comma: True
semicolon: False
Main method

The program defines a Program class with two enclosed static method. The Main entry point is where the program execution begins. In Main, three local bool variables are declared but not initialized.

Bool

Then:Those same bool variable locations on the stack are initialized to the false Boolean literal in the TestString method called next.

And:In the loop in TestString, if certain characters occur in the string, the bool parameters are assigned true.

True, FalseString type

Calling pattern. The TestString method as shown can be used in certain kinds of programs that want to find multiple properties of the string in a single pass through the string's characters.

Tip:You could search individually for each character. But this would incur more overhead.

Therefore:This provides a way for the calling method to query if the string has any of the specified characters, and which ones.

Discussion

Bool keyword

The out descriptor tells the intermediate language compiler to copy the actual variable storage location, not just the value at a storage location. Out parameters are often most useful for value types such as bool.

Warning:There is no other easy way to return multiple values without allocating an array or object.

ArrayObject

Definite assignment

The C# Programming Language: C-Sharp

The C# compiler applies definite assignment analysis. In the program, the three Boolean values are uninitialized. They are never assigned in Main. But the out keyword demands that they are always assigned in the body of TestString.

RefDefinite Assignment Analysis

Note:The compiler knows that the three Boolean variables are always set to an explicit true or false value when TestString returns.

Summary

The C# programming language

We used the keyword out for one method to signal to the calling location that the variable location's were initialized and written to in the method. Out is most useful for value types and where OOP is not convenient or worth applying.

Object-Oriented Programming

Thus:Out simplifies code where multiple function calls can be combined into a single call that returns all of the relevant values.


C#: Method