Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When and why should I use ClassName : this(null)?

i can't understand the difference between a simple bare

Public ClassName() {}

and

Public ClassName() : this(null) {}

I know I can use it only if i have a +1 overloaded ctor, but I can't understand the advantages of defining the parameterless constructor this way.

like image 431
Sergio Avatar asked Feb 13 '13 18:02

Sergio


2 Answers

This permits the single-param constructor to have all the logic, so it isn't repeated.

public ClassName() : this(null) {}

public ClassName(string s)
{
    // logic (code)
    if (s != null) {
        // more logic
    }
    // Even more logic
}

I hope it's clear that the "logic" and "even more logic" would have needed to be repeated in the parameterless constructor if not for the this(null).

like image 182
John Saunders Avatar answered Sep 18 '22 17:09

John Saunders


One very useful case is situations like WinForms where the designer requires a prameterless constructor but you want your form to require a constructor.

public partial SomeForm : Form
{
    private SomeForm() : this(null)
    {
    }

    public SomeForm(SomeClass initData)
    {
        InitializeComponent();

        //Do some work here that does not rely on initData.           

        if(initData != null)
        {
           //do somtehing with initData, this section would be skipped over by the winforms designer.
        } 
    }
}
like image 39
Scott Chamberlain Avatar answered Sep 19 '22 17:09

Scott Chamberlain