C#:.NET:Method

.NET Array Dictionary List String 2D Async DataTable Dates DateTime Enum File For Foreach Format IEnumerable If IndexOf Lambda LINQ Parse Path Process Property Regex Replace Row Sort Split Static StringBuilder Substring Switch Tuple

Return. Methods return only one value. A return statement is a jump statement. It transfers control unconditionally to the end point of the call site in the stack frame.
More details. Returns either specify a value or expression, or are void. In an expression-bodied method, we can specify a return value as a direct expression (like a lambda expression).Void
An example. First, the return statement is a jump statement. It affects control flow. Control flow models the path of the execution engine when it manipulates evaluation stacks in methods.

Then: Whenever an argument to a method is encountered, a token is pushed onto the stack and the new method is invoked.

Steps: In the called method, three kinds of memory are allocated: the parameter slots, the local variable slots, and the evaluation stack.

Based on: .NET 4.6

C# program that uses return statement

using System;

class Program
{
    static void Main()
    {
	// Call four methods and store their return values.
	int value1 = MethodA();
	string value2 = MethodB(true);
	string value3 = MethodB(false);
	int value4 = MethodC(5, 2);

	// Display the results.
	Console.WriteLine(value1);
	Console.WriteLine(value2);
	Console.WriteLine(value3);
	Console.WriteLine(value4);

	// Invoke a void method.
	MethodD();
    }

    static int MethodA()
    {
	// This method returns a constant integer.
	return 100;
    }

    static string MethodB(bool flag)
    {
	// This method returns a string reference based on the flag.
	return flag ?
	    "cat" :
	    "dog";
    }

    static int MethodC(int operand1, int operand2)
    {
	// This method returns an integer based on an expression.
	return (operand1 * 10) + operand2;
    }

    static void MethodD()
    {
	// This method uses a return statement with no expression (void).
	Console.WriteLine("MethodD executed");
	return;
    }
}

Output

100
cat
dog
52
MethodD executed
Program notes. The three methods above all return values. MethodA loads the constant integer 100 and returns that value to the call site. This method is small so it is often inlined.Const

MethodB: This accepts a parameter of type boolean. The logic contained in the method is not returned, just the value of the evaluation.Ternary: You can find more details about the ternary operator. It is a special representation of an if-statement.

Ternary

MethodC: The two parameters to this method are operands. They are used in a computation that multiplies the first operand by ten.

And: The integer resulting from this expression is placed on the stack and this single 4-byte value is copied to the call site.


Expression-bodied methods. Some methods that return values do not use a return statement. The C# language supports expression-bodied methods.

Tip: These methods are written more like lambda expressions. We use the lambda operator, and no "return" keyword is specified.

Instead: The result of the expression is treated as a return value. So an invisible "return" is assumed by the C# compiler.

C# program that uses expression-bodied method

using System;

class Program
{
    // An expression-bodied method.
    static string FormatFancy(string name) => ("Name: " + name.ToUpper());

    static void Main(string[] args)
    {
	// Call the FormatFancy method.
	string result = FormatFancy("sam");
	Console.WriteLine(result);
    }
}

Output

Name: SAM
Void. The void keyword specifies that no specific value is returned from the method. You must use "void" in the method signature. This word was inherited from older C-like languages.

Tip: Void methods do not always require return statements. Sometimes you can use a return to avoid executing unnecessary statements.


Expressions. You could specify if-statements to compute return values, but this approach is more verbose. Expressions can instead be used to condense high-level code.

Normally: This has no performance impact, although sometimes using local variables can improve or degrade speed.


Other returns. Many programs return string references of either constant form or newly-constructed strings. String is a reference type in the language that is special-cased by the runtime.Return ArrayReturn BoolReturn Multiple Values

Tip: Like all reference types, the string type is pushed to the stack and it is only four or eight bytes on computers.

Strings

String: The string data is never copied when you assign a variable to the result of the method that returns a string.


Ret. This is the IL return instruction. Ret can be executed when there is one or zero items in the evaluation stack. The evaluation stack contains varying types of elements.IL: ret

Note: If the method returns one value, the evaluation stack should have one value of that type when the ret instruction is executed.

And: If the method returns void, the evaluation stack can be empty. Serge Lidin's "Expert .NET 2.0 IL Assembler" describes these things.


A summary. It is common to return values in methods. We discussed the concepts of reachability and end points, and how the execution engine processes ret instructions.