[C# Solution] Base Class Does Not Contain a Constructor That Takes 0 Arguments

C#Recently, I encountered an error while creating a constructor in a derived class. The error and code is given below.

Error:

Error 1 ‘Hello_World.Customer’ does not contain a constructor that takes 0 arguments

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
using System;
namespace Hello_World
{
class Customer
{
public string _name;
public Customer(string name)
{
_name = name;
}
public void PrintName()
{
Console.WriteLine(_name);
}
}
class Customer2 : Customer
{
//Error
public Customer2(string name)
{
_name = name;
}
}
class Program
{
static void Main(string[] args)
{
Customer2 cust = new Customer2("Robert Marks");
cust.PrintName();
}
}
}
using System; namespace Hello_World { class Customer { public string _name; public Customer(string name) { _name = name; } public void PrintName() { Console.WriteLine(_name); } } class Customer2 : Customer { //Error public Customer2(string name) { _name = name; } } class Program { static void Main(string[] args) { Customer2 cust = new Customer2("Robert Marks"); cust.PrintName(); } } }
using System;



namespace Hello_World
{

    class Customer
    {
        public string _name;
        
        public Customer(string name)
        {
            _name = name;
        }


        public void PrintName()
        {
            Console.WriteLine(_name);
        }

    }

   class Customer2 : Customer
    {       
       //Error
        public Customer2(string name)
        {
          _name = name;
        }
    
    }

    class Program
    {
        static void Main(string[] args)
        {
            Customer2 cust = new Customer2("Robert Marks");
            cust.PrintName();
        }
    }
}

I tried my best to analyze the issue, but somehow I was not able to figure out that why derived class is not allowing me to create a constructor and showing this annoying error.  After doing a little search over internet, I finally found the solution.

The problem was that I did not know the fact that whenever you try to call a constructor in derived class, then by default a base class parameterless constructor is called first.  Also, if you are creating a custom constructor in base class, then your default base class parameterless constructor will be overridden.  Now, in this case, there are 2 solutions.  First solution, you need to explicitly create a base class parameterless constructor.  Second solution, while creating your derived class constructor, you need to call a base class custom constructor using base keyword and passing required parameters to it.  Examples for both solutions are given below.

First Solution :  Parameterless Constructor

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
using System;
namespace Hello_World
{
class Customer
{
public string _name;
//Solution 1: Custom Constructor with 0 Arguements
public Customer()
{
}
public Customer(string name)
{
_name = name;
}
public void PrintName()
{
Console.WriteLine(_name);
}
}
class Customer2 : Customer
{
//Error
public Customer2(string name)
{
_name = name;
}
}
class Program
{
static void Main(string[] args)
{
Customer2 cust = new Customer2("Robert Marks");
cust.PrintName();
}
}
}
using System; namespace Hello_World { class Customer { public string _name; //Solution 1: Custom Constructor with 0 Arguements public Customer() { } public Customer(string name) { _name = name; } public void PrintName() { Console.WriteLine(_name); } } class Customer2 : Customer { //Error public Customer2(string name) { _name = name; } } class Program { static void Main(string[] args) { Customer2 cust = new Customer2("Robert Marks"); cust.PrintName(); } } }
using System;



namespace Hello_World
{

    class Customer
    {
        public string _name;
        
        //Solution 1:  Custom Constructor with 0 Arguements
        public Customer()
        {

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


        public void PrintName()
        {
            Console.WriteLine(_name);
        }

    }

   class Customer2 : Customer
    {       
       //Error
        public Customer2(string name)
        {
            _name = name;
        }
    
    }

    class Program
    {
        static void Main(string[] args)
        {
            Customer2 cust = new Customer2("Robert Marks");
            cust.PrintName();
        }
    }
}

Second Solution :  Calling Base Class Constructor

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
using System;
namespace Hello_World
{
class Customer
{
public string _name;
public Customer(string name)
{
_name = name;
}
public void PrintName()
{
Console.WriteLine(_name);
}
}
class Customer2 : Customer
{
//Solution 2: Calling Base Class Constructor using Base keyword and passing required
// parameter
public Customer2(string name) : base(name)
{
}
}
class Program
{
static void Main(string[] args)
{
Customer2 cust = new Customer2("Robert Marks");
cust.PrintName();
}
}
}
using System; namespace Hello_World { class Customer { public string _name; public Customer(string name) { _name = name; } public void PrintName() { Console.WriteLine(_name); } } class Customer2 : Customer { //Solution 2: Calling Base Class Constructor using Base keyword and passing required // parameter public Customer2(string name) : base(name) { } } class Program { static void Main(string[] args) { Customer2 cust = new Customer2("Robert Marks"); cust.PrintName(); } } }
using System;



namespace Hello_World
{

    class Customer
    {
        public string _name;
                
        public Customer(string name)
        {
            _name = name;
        }


        public void PrintName()
        {
            Console.WriteLine(_name);
        }

    }

   class Customer2 : Customer
    {       
       //Solution 2: Calling Base Class Constructor using Base keyword and passing required
       // parameter
        public Customer2(string name) : base(name)
        {
            
        }
    
    }

    class Program
    {
        static void Main(string[] args)
        {
            Customer2 cust = new Customer2("Robert Marks");
            cust.PrintName();
        }
    }
}