使用继承时出错

问题描述

|| 我创建了一个类,并通过该类传递了构造函数,然后使该类成为了抽象类,但是当我想从继承类中获取抽象类的1个属性时,它显示一些错误,不能接受参数0
public class Device1
{
    public int dwMachineNumber;
    public int dwBaudrate;
    public int dwCommPort;
    public string dwIPAddress;
    public int dwPort;
    public int dwPassWord;

    public Device1(int dwMachineNumber)
    {
        this.dwMachineNumber = dwMachineNumber;
    }

    public Device1(int dwMachineNumber,int dwBaudrate,int dwCommPort,string dwIPAddress,int dwPort,int dwPassWord)
    {
        this.dwMachineNumber = dwMachineNumber;
        this.dwBaudrate = dwBaudrate;
        this.dwCommPort = dwCommPort;
        this.dwIPAddress = dwIPAddress;
        this.dwPort = dwPort;
        this.dwPassWord = dwPassWord;
    }

}

public class EnableMachine : Device1
{
    public int Device_Busy; //if 0 busy and 1 not busy 

    public EnableMachine(int dwMachineNumber,int Device_Busy)
    {
        this.Device_Busy = Device_Busy;
        this.dwMachineNumber = dwMachineNumber;
    }
}
    

解决方法

尝试这个:
public class EnableMachine : Device1
{
    public int Device_Busy; //if 0 busy and 1 not busy 

    public EnableMachine(int dwMachineNumber,int Device_Busy) 
        : base(dwMachineNumber)
    {
        this.Device_Busy = Device_Busy;
    }
}
编辑: 在调用派生类的构造函数时,它还会尝试调用基类的构造函数。由于您刚刚:
public EnableMachine(int dwMachineNumber,int Device_Busy)
{...}
默认情况下,它尝试调用无参数构造函数“ 3”,但Device1没有无参数构造函数;因此错误\“ ..不包含接受0个参数\”的方法。 您需要通过添加以下行来告诉它使用接受dwMachineNumber参数的构造函数
: base(dwMachineNumber)
到派生类的构造函数。因此,有效地,当实例化派生类时,它将采用dwMachineNumber参数并将其中继到基类的构造函数中。     ,这不会编译,因为您的
EnableMachine
构造函数实际上是:
public EnableMachine(int dwMachineNumber,int Device_Busy)
    : base() // Call base class parameterless constructor
{
    this.Device_Busy = Device_Busy;
    this.dwMachineNumber = dwMachineNumber;
}
现在,基类没有无参数的构造函数。 代码应为:
public EnableMachine(int dwMachineNumber,int Device_Busy)
    : base(dwMachineNumber)
{
    this.Device_Busy = Device_Busy;
}
至于代码的其余部分:我强烈建议您不要使用公共字段,不要在公共成员名称中使用下划线,不要使用伪匈牙利语命名(例如
dw
前缀),并使用更具描述性的类名。     ,确保在派生类构造函数中调用基本构造函数:
public EnableMachine(int dwMachineNumber,int Device_Busy)
    : base(dwMachineNumber)
{
    this.Device_Busy = Device_Busy;
}
注意,您不再需要在派生构造函数中设置“ 10”,因为这是在基类中完成的。