C# Error: Parent does not contain a constructor that takes 0 arguments

104,195

Solution 1

Since you don't explicitly invoke a parent constructor as part of your child class constructor, there is an implicit call to a parameterless parent constructor inserted. That constructor does not exist, and so you get that error.

To correct the situation, you need to add an explicit call:

public Child(int i) : base(i)
{
    Console.WriteLine("child");
}

Or, you can just add a parameterless parent constructor:

protected Parent() { } 

Solution 2

You need to change your child's constructor to:

public child(int i) : base(i)
{
    // etc...
}

You were getting the error because your parent class's constructor takes a parameter but you are not passing that parameter from the child to the parent.

Constructors are not inherited in C#, you have to chain them manually.

Solution 3

You need to change the constructor of the child class to this:

public child(int i) : base(i)
{
    Console.WriteLine("child");
}

The part : base(i) means that the constructor of the base class with one int parameter should be used. If this is missing, you are implicitly telling the compiler to use the default constructor without parameters. Because no such constructor exists in the base class it is giving you this error.

Solution 4

The compiler cannot guess what should be passed for the base constructor argument. You have to do it explicitly:

public class child : parent {
    public child(int i) : base(i) {
        Console.WriteLine("child");
    }
}
Share:
104,195
Kuntady Nithesh
Author by

Kuntady Nithesh

@kuntadynitheshgooglelinkedin

Updated on February 23, 2020

Comments

  • Kuntady Nithesh
    Kuntady Nithesh about 4 years

    My code is

    public class Parent
    {
    
        public Parent(int i)
        {
            Console.WriteLine("parent");
        }
    }
    
    public class Child : Parent
    {
        public Child(int i)
        {
            Console.WriteLine("child");
        }
    
    }
    

    I am getting the error:

    Parent does not contain a constructor that takes 0 arguments.

    I understand the problem is that Parent has no constructor with 0 arguments. But my question is, why do we need a constructor with zero arguments? Why doesn't the code work without it?

    • Grochni
      Grochni over 8 years
      I had the same error message for another reason when extending an abstract class with an internal constructor from another assembly. This is currently the case for TypeInfo, FieldInfo, ... in DotNetCore. Just wanted to share this knowledge as it took me hours to resolve it.
  • Daniel Hilgarth
    Daniel Hilgarth over 12 years
    Nitpicking: He isn't getting any exception. That's a compiler error he is getting
  • wootscootinboogie
    wootscootinboogie over 10 years
    @DanielHilgarth you are technically correct, the best kind of correct.
  • Roberto
    Roberto over 8 years
    Probably a good idea to create a protected parent() { } instead of public.
  • Juan Carlos Oropeza
    Juan Carlos Oropeza over 7 years
    @Roberto Can you elaborate why?
  • dlev
    dlev over 7 years
    @JuanCarlosOropeza The basic reason is that, up until now, there was no need for a parameterless parent constructor, so the assumption would be that consumers of the class don't need one. Since we really only want one for the sake of any deriving classes, protected is the sensible modifier, since that has the exact semantics of "only accessible to child classes".
  • Taran
    Taran over 5 years
    guys seems in .net Core FaultException<T> is missing one,two and three param constructors. Wondering , if any one resolved issue. I am migrating old code to .net core