2011-05-26 87 views
0

我已經創建了一個類,並與那個類我傳遞構造函數,然後我做了那個類的抽象類,但是當我想從繼承類獲取抽象類的屬性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; 
    } 
} 
+1

我不知道你的問題是什麼? – 2011-05-26 09:19:19

+1

'public int Device_Busy;'看起來很奇怪。我沒有看到任何抽象類... – BoltClock 2011-05-26 09:19:49

+0

它只是一個繼承類 – Mano 2011-05-26 09:21:53

回答

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參數的方法」。

您需要告訴它通過增加線

: base(dwMachineNumber) 

到您的派生類的構造函數使用構造函數接受dwMachineNumber說法。所以,實際上,當您實例化派生類時,它將採用參數dwMachineNumber並將其傳遞給基類的構造函數。

+0

的屬性謝謝,但你可以教我關於 – Mano 2011-05-26 10:05:43

+0

@Mano:請參閱我編輯的答案。事實上,Jon Skeet的答案最清楚。 – tobias86 2011-05-26 11:21:41

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

至於其餘代碼:我會強烈建議您不要使用公共字段,不要在公共成員名稱中使用下劃線,不要用僞 - 匈牙利語命名(例如dw前綴),並使用更多描述性的類名稱。

0

確保調用基類的構造在派生類的構造函數:

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

請注意,您不再需要設置dwMachineNumber派生的構造函數,因爲這是在基類中完成的。