使用继承时出错

时间:2011-05-26 09:17:58

标签: c#

我已经创建了一个类,并且使用该类我传递了构造函数,然后我创建了该类抽象类,但是当我想从继承类中获取抽象类的1个属性时,它显示一些错误不能接受参数0 < / p>

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;
    }
}

3 个答案:

答案 0 :(得分:4)

这将无法编译,因为您的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;
}

至于代码的其余部分:我强烈鼓励你不要使用公共字段,不要在公共成员名称中使用下划线,不要使用伪匈牙利语命名(例如{{ 1}}前缀),并使用更多描述性的类名。

答案 1 :(得分:1)

试试这个:

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 参数并将其中继到基类的构造函数。

答案 2 :(得分:0)

确保在派生类构造函数中调用基础构造函数:

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

请注意,您不再需要在派生构造函数中设置dwMachineNumber,因为这是在基类中完成的。