C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Tip: To specify an optional parameter, assign the formal parameter in the method parameter list to an appropriate value.
Here: We set the formal parameter "value" to 1, and the formal parameter "name" to "Perl".
And: Whenever Method is called without a parameter specified, its default value is used instead in the method body.
Thus: We can call Method() with no parameters. And we can call it with only an int parameter.
C# program that uses optional parameters
using System;
class Program
{
static void Main()
{
// Omit the optional parameters.
Method();
// Omit second optional parameter.
Method(4);
// You can't omit the first but keep the second.
// Method("Dot");
// Classic calling syntax.
Method(4, "Dot");
// Specify one named parameter.
Method(name: "Sundar");
// Specify both named parameters.
Method(value: 5, name: "Pichai");
}
static void Method(int value = 1, string name = "Perl")
{
Console.WriteLine("value = {0}, name = {1}", value, name);
}
}
Output
value = 1, name = Perl
value = 4, name = Perl
value = 4, name = Dot
value = 1, name = Sundar
value = 5, name = Pichai
Important: For the optional parameter feature, an attribute is used to decorate the optional parameters.
And: The attribute stores some object data about the default value of the parameter.
AttributeIntermediate language for optional parameter method: IL
.method private hidebysig static void Method([opt] int32 'value',
[opt] string name) cil managed
{
.param [1] = int32(1)
.param [2] = string('Perl')
.maxstack 8
L_0000: ldstr "value = {0}, name = {1}"
L_0005: ldarg.0
L_0006: box int32
L_000b: ldarg.1
L_000c: call void [mscorlib]System.Console::WriteLine(string, object, object)
L_0011: ret
}
Important: The C# compiler transforms the calls where parameters were omitted to regular syntax calls.
So: Method calls that omit parameters are the same speed as those that use the standard syntax.