使用继承时出错
本文关键字:出错 继承 | 更新日期: 2023-09-27 17:57:39
我创建了一个类,用这个类我传递了构造函数,然后我使这个类成为抽象类,但当我想从inherit类中获得抽象类的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;
}
}
这不会编译,因为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 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)
{...}
它在默认情况下尝试调用无参数构造函数Device()
,但是Device1没有无参数构造函数;因此出现错误"..不包含接受0个参数的方法"。
您需要告诉它使用接受dwMachineNumber参数的构造函数,方法是添加行
: base(dwMachineNumber)
到派生类的构造函数。因此,实际上,当您实例化派生类时,它会使用dwMachineNumber参数,并将其中继到基类的构造函数。
确保在派生类构造函数中调用基构造函数:
public EnableMachine(int dwMachineNumber, int Device_Busy)
: base(dwMachineNumber)
{
this.Device_Busy = Device_Busy;
}
请注意,您不再需要在派生构造函数中设置dwMachineNumber
,因为这是在基类中完成的。