C# – How to Call This and Base Constructor

c++constructorinheritance

I have a pretty simple and straightforward question.
What is the standardized way, or the right way, of calling another constructor of a class, along with the base constructor of such class?
I understand that the second example does not work. It just seems hackish to be doing it the third way. So what is the way that the people who designed C# expected users to do this?

For example:

public class Person
{
    private int _id;

    private string _name;

    public Person()
    {
        _id = 0;
    }

    public Person(string name)
    {
        _name = name;
    }
}

// Example 1
public class Engineer : Person
{
    private int _numOfProblems;

    public Engineer() : base()
    {
        _numOfProblems = 0;
    }

    public Engineer(string name) : this(), base(name)
    {
    }
}

// Example 2
public class Engineer : Person
{
    private int _numOfProblems;

    public Engineer() : base()
    {
        InitializeEngineer();
    }

    public Engineer(string name) : base(name)
    {
        InitializeEngineer();
    }

    private void InitializeEngineer()
    {
        _numOfProblems = 0;
    }
}

Best Answer

Can't you simplify your approach by using an optional parameter?

    public class Person
    {
        public int Id { get; protected set; }
        public string Name { get; protected set; }
        public Person(string name = "")
        {
            Id = 8;
            Name = name;
        }
    }

    public class Engineer : Person
    {
        public int Problems { get; private set; }
        public Engineer(string name = "")
            : base(name)
        {
            Problems = 88;
        }
    }

    [TestFixture]
    public class EngineerFixture
    {
        [Test]
        public void Ctor_SetsProperties_AsSpecified()
        {
            var e = new Engineer("bogus");
            Assert.AreEqual("bogus", e.Name);
            Assert.AreEqual(88, e.Problems);
            Assert.AreEqual(8, e.Id);
        }
    }
Related Question