类不包含带0参数的构造函数

And*_*ili 29 .net c#

我有这两个分别被称为的类:MaliciousMaliciousSmall:

恶意代码:

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

namespace DataModel.MaliciousCode
{
    public class Malicious : MaliciousSmall
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

恶意代码小:

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();

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

}
Run Code Online (Sandbox Code Playgroud)

我的问题是,在那之后我实现了MaliciousSmall类,我在恶意构造函数上获得了以下错误:

错误53'DataModel.MaliciousCode.MaliciousSmall'不包含带0参数的构造函数C:\ Develop\EarlyWarning\public\Implementazione\Ver2\DataModel\MaliciousCode\Malicious.cs 9 18 DataModel

我该怎么做才能解决它?

我试图创建一个空的构造函数,将DataRow对象作为参数,类似于:

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)
        {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我仍然有同样的问题.我错过了什么?我该怎么办才能解决?

Jon*_*eet 85

该错误告诉您Malicious构造函数无法在其基类(MaliciousSmall)中找到合适的构造函数进行链接.

最初的问题是你的派生类构造函数隐式包含这个构造函数:

public Malicious() : base()
{
}
Run Code Online (Sandbox Code Playgroud)

或者甚至当你添加了一个显式的构造函数时,它仍然试图链接到一个无参数的构造函数:

public Malicious(DataRow row) : base()
{
}
Run Code Online (Sandbox Code Playgroud)

...但在基类(没有这样的参数的构造MaliciousSmall),因此该错误.

我想你想链构造连续服用(你的人已经在声明MaliciousSmall):

public Malicious(DataRow row) : base(row)
{
}
Run Code Online (Sandbox Code Playgroud)

这是假设您总是希望向构造函数提供一行.如果您确实希望在不指定行的情况下创建实例,则需要向类添加无参数构造函数:

public MaliciousSmall()
{
    // Set fields/properties to some default values
}
Run Code Online (Sandbox Code Playgroud)

您可能希望派生类有两个构造函数:

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

public Malicious(DataRow row) : base(row) // Chain to parameterized constructor
{
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅有关构造函数链接的文章.

  • @AndreaNobili:构造函数不是虚拟的 - 你不要*覆盖它们.但是,每个构造函数需要*链*到同一个类中的另一个构造函数,或者基类中的构造函数 - 该链接构造函数在执行链接的构造函数的主体之前执行.该代码从`Malicious(DataRow)`构造函数链接到`MaliciousSmall(DataRow)`构造函数.阅读我在答案底部链接的文章. (9认同)
  • @hijarian完全没有.如果你明确地编写了一个非默认的构造函数,那么生成一个默认的构造函数将是*完全错误的事情*.它会让你班级的任何消费者完全绕过你试图建立的不变量. (8认同)
  • @AndreaNobili,如果您打算进行C#编程,那么值得阅读Jon Skeets关于构造函数如何工作的文章.他在回答中简要提到了这个问题:http://www.yoda.arachsys.com/csharp/constructors.html (2认同)

Con*_*ell 7

我试图创建一个以DataRow对象作为参数的空构造函数

我认为你有一个空洞的混淆.根据定义,空构造函数不接受任何参数.你不能有一个带参数的空构造函数.

如果您还想将参数保留在派生类的构造函数中,则需要使用base关键字来指定基本构造函数.

public Malicious(DataRow row)
    : base(row)
{
}
Run Code Online (Sandbox Code Playgroud)