Class does not contain a constructor that takes 0 arguments

I have these 2 classes that are respectively called: Malicious and MaliciousSmall:

Code of Malicious:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataModel.MaliciousCode
{
    public class Malicious : MaliciousSmall
    {
    }
}

Code of MaliciousSmall:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Data;
namespace DataModel.MaliciousCode
{
    public class MaliciousSmall
    {
        public int Id { get; set; }
        public int MaliciousCodeAlertId { get; set; }
        public string SourceId { get; set; }
        public int MalCodeID { get; set; }
        ......................................................
        ......................................................
        ......................................................

        // CONSTRUCTOR:

       public MaliciousSmall(DataRow row)
        {
            Id = int.Parse(row["Id"].ToString());

            MaliciousCodeAlertId = (row["MaliciousCodeAlertId"] is DBNull) ? MaliciousCodeAlertId = -1 : MaliciousCodeAlertId = int.Parse(row["MaliciousCodeAlertId"].ToString());
            SourceId = (row["SourceId"] is DBNull) ? SourceId = "" : SourceId = row["MaliciousCodeAlertId"].ToString();
            MalCodeID = (row["MalCodeID"] is DBNull) ? MalCodeID = -1 : MalCodeID = int.Parse(row["MalCodeID"].ToString());
            Title = (row["Title"] is DBNull) ? Title = "" : Title = row["Title"].ToString();

        ......................................................
        ......................................................
        ......................................................
        }

}

My problem is that, after that I have implementet the MaliciousSmall class I obtain the following error on the Malicious constructor:

Error 53 'DataModel.MaliciousCode.MaliciousSmall' does not contain a constructor that takes 0 arguments C:\Develop\EarlyWarning\public\Implementazione\Ver2\DataModel\MaliciousCode\Malicious.cs 9 18 DataModel

What can I do to solve it?

I tried to create an empty constructor that take a DataRow object as paramether, something like it:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Data;

namespace DataModel.MaliciousCode
{
    public class Malicious : MaliciousSmall
    {

        public Malicious(DataRow row)
        {

        }
    }
}

But I still have the same problem. What am I missing? What can I do to solve?

Jon Skeet
people
quotationmark

The error is telling you that the Malicious constructor can't find a suitable constructor to chain to in its base class (MaliciousSmall).

The initial problem is that your derived class constructor implicitly contains this constructor:

public Malicious() : base()
{
}

Or even when you've added an explicit constructor, it's still trying to chain to a parameterless one:

public Malicious(DataRow row) : base()
{
}

... but there is no such parameterless constructor in the base class (MaliciousSmall), hence the error.

I think you want to chain to the constructor taking a row (the one you have declared in MaliciousSmall):

public Malicious(DataRow row) : base(row)
{
}

That's assuming you always want a row to be provided to the constructor. If you actually want to allow an instance to be created without specifying a row, then you need to add a parameterless constructor to the base class:

public MaliciousSmall()
{
    // Set fields/properties to some default values
}

You'd probably then want your derived class to have two constructors:

public Malicious() // Implicitly chain to the parameterless base constructor
{
}

public Malicious(DataRow row) : base(row) // Chain to parameterized constructor
{
}

See my article on constructor chaining for more details.

people

See more on this question at Stackoverflow