2017-03-16 77 views
0

這個常見錯誤有很多答案,但我看過的答案並沒有解決這個具體問題。 我有以下繼承;類有錯誤「沒有任何參數對應於所需的

public class C : B 
{ 
} 

public abstract class B : A 
{ 
    public B(string id, string name, JObject parameters) : base(parameters) 
    { 
    } 
} 

我收到的錯誤是;

CS7036 C# There is no argument given that corresponds to the required formal parameter 'id' of B.B(String, String, JObject) 

要修復它VS表明下面的構造以下;

public C(string id, string name, JObject parameters): 
     base(id, name, parameters) { } 

爲什麼C構造函數需要將所有值傳遞給B?我會想如果我沒有重寫繼承的構造函數,我不必再次定義它。 如果一個類沒有定義構造函數,則假定存在一個無參數的構造函數。然而,如果它從具有參數化構造函數的類繼承,那麼不應該這樣做嗎?

+0

構造函數是不是在C#繼承 – DavidG

+0

你的問題正是與標記的副本相同。只需用'B'替換'C',用'A'替換'B'。你的'C'試圖調用'B'中唯一的構造函數,它需要一個'id'(和'name'和'parameters'),但是'C'沒有提供''''。因此錯誤。你必須傳遞值,或者在'B'中放置一個無參數的構造函數(如標記的副本所述)。 –

+0

@PeterDuniho謝謝。我沒有意識到C會有一個隱含的無參構造函數,我認爲它會默認爲基類的構造函數簽名。但是現在我意識到從多個基地繼承時不起作用。我如何標記這適用於審覈?我無法用答案將其刪除。 –

回答

1

B只有一個構造函數,它有三個參數。 C目前正在使用其默認的構造函數(它不會奇蹟般地獲得B的構造函數),它可以被明確寫入:

public C(): base() 
{ } 

然而,基類的構造不存在。至少,你需要使用正確的基礎構造(現在需要你定義它):

public C(): base(id, name, parameters) 
{ } 

除了現在使用的是未聲明的變量。你可以傳遞這些默認值,但是VS把它們放在C的參數列表中。

0

參考回到類構造函數爲你調用B類的基類的構造,這顯然不符合構造函數的參數爲​​A類

相關問題