SIGN UP MEMBER LOGIN:    
ARTICLE

Dig Out on Named vs Optional Arguments Clear Implementation in C# 4.0

Posted by Vijay Prativadi Articles | .NET 4.5 December 06, 2011
Today, Let’s see the one of the main feature of C# 4.0 i:e Named and Optional arguments. Firstly, we will do theory based session to understand this and later we will try to implement these concepts. This concept is very useful and we can code in much organized way using these two arguments.
Reader Level:

Named and Optional Arguments

Today, Let's see the one of the main feature of C# 4.0 i.e. Named and Optional arguments. Firstly, we will do theory based session to understand this and later we will try to implement these concepts.  This concept is very useful and we can code in much organized way using these two arguments.

Named Arguments:
 
The Named Arguments allows us to code in such a manner where we can specify our arguments of particular calling function as per our requirement, This provides a greater flexibility for us to access and organize the code to prioritize and keep the parameters in any fashion rather than a simple static way as per method structure.
 
Optional Arguments:
 
The Optional Arguments allows us to code in such a manner where we can specify some default values to the parameters of particular method. It provides a greater flexibility for us to access and organize the code when the method is invoked, it's optionally chooses some default values if the user does the specify values for other parameters. It will only choose the values optionally for such parameters where it has been already initialized in the method. So, this argument helps in better way to pass on some default values for particular method where ever it is been invoked.
 
Now, firstly we will see clear Implementation of how to perform Named Arguments Operation:

Code Toolbox Requirement:

  • 3 TextBoxes, 3 Buttons and 3 Labels.

The Named Argument Method is declared with some parameters:

    protected void NamedArguments(string Name, string Position, int Age)
    {

    }

In the case 1:

We are Passing the Parameters as per declared similar in the method with Name, Position and Age. Where the code for this looks like this:

NamedArguments(Name: TextBox1.Text, Position: TextBox2.Text, Age: Convert.ToInt32(TextBox3.Text));
Label1.Text = "<strong>Name: </strong>&nbsp" + TextBox1.Text;
Label1.ForeColor = System.Drawing.Color.Brown;
Label2.Text = "<strong>Position: </strong>&nbsp" + TextBox2.Text;
Label2.ForeColor = System.Drawing.Color.Brown;
Label3.Text = "<strong>Age: </strong>&nbsp" + TextBox3.Text;
Label3.ForeColor = System.Drawing.Color.Brown;

 
In the case 2:

We are Passing the Parameters as per declared similar in the method with Position, Name and Age. Where the code for this looks like this:

NamedArguments(Position: TextBox1.Text, Name: TextBox2.Text, Age: Convert.ToInt32(TextBox3.Text)); Label1.Text = "<strong>Position: </strong>&nbsp" + TextBox1.Text;
Label1.ForeColor = System.Drawing.Color.Brown;
Label2.Text = "<strong>Name: </strong>&nbsp" + TextBox2.Text;
Label2.ForeColor = System.Drawing.Color.Brown;
Label3.Text = "<strong>Age: </strong>&nbsp" + TextBox3.Text;
Label3.ForeColor = System.Drawing.Color.Brown;

In the case 3:

We are Passing the Parameters as per declared similar in the method with Age, Name and Position. Where the code for this looks like this:

NamedArguments(Age: Convert.ToInt32(TextBox1.Text), Name: TextBox2.Text, Position: TextBox3.Text);
Label1.Text = "<strong>Age: </strong>&nbsp" + TextBox1.Text;
Label1.ForeColor = System.Drawing.Color.Brown;
Label2.Text = "<strong>Name: </strong>&nbsp" + TextBox2.Text;
Label2.ForeColor = System.Drawing.Color.Brown;
Label3.Text = "<strong>Position: </strong>&nbsp" + TextBox3.Text;
Label3.ForeColor = System.Drawing.Color.Brown;

Now, we are done with Named Arguments as we have passed the parameters as per our requirements regardless of position based in normal static way. Now, it's time for use to go and implement Optional Arguments.

The code logic for optional arguments looks like this where we specify some default values and if the user does not pass any values the default values will be invoked automatically.

protected int OptionalArguments(int x, int y = 10, int z = 5)
{
    return x + y + z;

}

Only specified value for X parameters like this:
          
Response.Write("<b><center>The Sum of the three Numbers are <h1>" + OptionalArguments(x: 25) + "</h1></b></center>");

The values specified for three parameters looks like this:
          
Response.Write("<b><center>The Sum of the three Numbers are <h1>" + OptionalArguments(x: 25, y:22, z: 10) + "</h1></b></center>");

So, the Complete Code of WebForm1.aspx looks like this:

 
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Named_and_Optional_Arguments.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
</
head>
<
body>
<
form id="form1" runat="server">
<div><center>
Please Enter Values Here:&nbsp; <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<br />
Please Enter Values Here:&nbsp; <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br
/>
<br />
Please Enter Values Here:&nbsp; <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox
>
</center>
<
center>
<
asp:Button ID="Button1" runat="server" Text="Case 1 " onclick="Button1_Click" /><br />
<br />
<asp:Button ID="Button2" runat="server" Text="Case 2 " onclick="Button2_Click"/><br /><br />

<asp:Button ID="Button3" runat="server" Text="Case 3 " onclick="Button3_Click"/><br /><br />

</center>

<center>
<
asp:Label ID="Label1" runat="server"></asp:Label><br />
<br />

<asp:Label ID="Label2" runat="server"></asp:Label><br />
<br />
<asp:Label ID="Label3" runat="server"></asp:Label><br />
<br />

</center>
</
div>
</
form>
</
body>
</
html>

The Complete Code of WebForm1.aspx.cs looks like this:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Named_and_Optional_Arguments
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("<b><center>The Sum of the three Numbers with X specified value only <h1>" + OptionalArguments(x: 25) + "</h1></b></center>");
            Response.Write("<b><center>The Sum of the three Numbers are <h1>" + OptionalArguments(x: 25, y: 22, z: 10) + "</h1></b></center>");
        }
        protected void NamedArguments(string Name, string Position, int Age)
        {

        }
        protected int OptionalArguments(int x, int y = 10, int z = 5)
        {
            return x + y + z;

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            NamedArguments(Name: TextBox1.Text, Position: TextBox2.Text, Age: Convert.ToInt32(TextBox3.Text));
            Label1.Text = "<strong>Name: </strong>&nbsp" + TextBox1.Text;
            Label1.ForeColor = System.Drawing.Color.Brown;
            Label2.Text = "<strong>Position: </strong>&nbsp" + TextBox2.Text;
            Label2.ForeColor = System.Drawing.Color.Brown;
            Label3.Text = "<strong>Age: </strong>&nbsp" + TextBox3.Text;
            Label3.ForeColor = System.Drawing.Color.Brown;
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            NamedArguments(Position: TextBox1.Text, Name: TextBox2.Text, Age: Convert.ToInt32(TextBox3.Text));
            Label1.Text = "<strong>Position: </strong>&nbsp" + TextBox1.Text;
            Label1.ForeColor = System.Drawing.Color.Brown;
            Label2.Text = "<strong>Name: </strong>&nbsp" + TextBox2.Text;
            Label2.ForeColor = System.Drawing.Color.Brown;
            Label3.Text = "<strong>Age: </strong>&nbsp" + TextBox3.Text;
            Label3.ForeColor = System.Drawing.Color.Brown;

        }

        protected void Button3_Click(object sender, EventArgs e)
        {
            NamedArguments(Age: Convert.ToInt32(TextBox1.Text), Name: TextBox2.Text, Position: TextBox3.Text);
            Label1.Text = "<strong>Age: </strong>&nbsp" + TextBox1.Text;
            Label1.ForeColor = System.Drawing.Color.Brown;
            Label2.Text = "<strong>Name: </strong>&nbsp" + TextBox2.Text;
            Label2.ForeColor = System.Drawing.Color.Brown;
            Label3.Text = "<strong>Position: </strong>&nbsp" + TextBox3.Text;
            Label3.ForeColor = System.Drawing.Color.Brown;

        }
    }
}



The Output of this application looks like this:

Named Vs Optinal Output Case 1.png


For Case 1 :

Named Vs Optinal Output Case 2.png


For Case 2:

Named Vs Optinal Output Case 3.png
For Case 3:

Named Vs Optinal Output.png
I hope this article is useful for you.

Login to add your contents and source code to this article
share this article :
post comment
 

Thank You James

Posted by Vijay Prativadi Dec 07, 2011

Thank You Alok .

Posted by Vijay Prativadi Dec 07, 2011

Nice Post

Posted by James Veronica Dec 06, 2011

Good Article.

Posted by Alok Pandey Dec 06, 2011
Nevron Gauge for SharePoint
Become a Sponsor
PREMIUM SPONSORS
  • Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
    The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
Team Foundation Server Hosting
Become a Sponsor