C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
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.
Example. 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.
Keyword: The out-keyword describes parameters whose actual variable locations are copied onto the stack of the called method.
And: 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) { // Assign all out parameters to false. period = comma = semicolon = 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
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.
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.
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. 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.
Definite assignment. 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.
Note: The compiler knows that the three Boolean variables are always set to an explicit true or false value when TestString returns.
Summary. With out, a method can signal to the calling location that the variable location's were initialized and written. Out simplifies code where multiple function calls can be combined into a single call. We return all the relevant values.