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?
This question is related to
c#
inheritance
constructor
compiler-errors
You can use a constructor with no parameters in your Parent class :
public parent() { }
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.
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.
By default compiler tries to call parameterless constructor of base class.
In case if the base class doesn't have a parameterless constructor, you have to explicitly call it yourself:
public child(int i) : base(i){
Console.WriteLine("child");}
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");
}
}
Source: Stackoverflow.com