如果您在C#(VS2005)中創建繼承類,您是否需要顯式調用較高類的構造函數,還是會自動調用它?VS2005中的C#:在繼承類中,是否需要顯式調用超級構造函數?
1
A
回答
3
如果未提供,則默認(無參數)構造函數將自動被調用。
換句話說,這些是等效:
public Foo() : base() {}
和
public Foo() {}
假設Foo的基部具有一個參數的構造函數。
在另一方面,如果基礎僅有這樣參數的構造函數:
protected MyBase(IBar bar) {}
然後
public Foo() {}
將無法編譯。在這種情況下,你必須用適當的參數明確地調用基礎 - 例如
public Foo(IBar bar) : base(bar) {}
0
如果基類有一個默認構造函數會自動調用。如果沒有默認構造函數,則必須明確調用一個構造函數。
0
如果不指定基類的默認構造函數,它將自動調用。
示例代碼:
public class ClassA
{
protected bool field = false;
public ClassA()
{
field = true;
}
}
public class ClassB : ClassA
{
public ClassB()
{
}
public override string ToString()
{
return "Field is " + field.ToString();
}
}
class Program
{
static void Main(string[] args)
{
ClassB target = new ClassB();
Console.WriteLine(target.ToString());
Console.ReadKey();
}
}
這將表明,「田」值設置爲true,即使ClassA的構造並沒有明確ClassB的調用。
相關問題
- 1. 的Java:繼承類構造函數調用超級
- 2. 未調用超類構造函數的多級繼承
- 3. 繼承類中的構造函數C++
- 4. DOJO中多繼承時調用超類的構造函數
- 5. 在java中調用繼承構造函數的構造函數
- 6. 從Java類繼承Scala:選擇要調用哪個超級構造函數
- 7. 從子類構造函數調用超級構造函數是否在內存中創建超類的對象?
- 8. 在C調用超級構造函數#
- 9. 從超類繼承構造函數?
- 10. 繼承和使用超類的構造函數在javascript中
- 11. C++繼承類的構造函數
- 12. C++中總是需要調用基類構造函數嗎?
- 13. 構造函數的超類與子類繼承C++
- 14. 調用超類函數繼承C++
- 15. 是否可以在ES6繼承類中調用超級setter?
- 16. C中的繼承和構造函數#
- 17. C++中的繼承構造函數
- 18. 我們可以在java中的多級繼承中調用第2個子類中的超類構造函數:
- 19. C#繼承構造函數
- 20. 當從線程繼承時調用超類構造函數
- 21. 調用繼承構造函數/析構函數的順序,C++
- 22. 繼承和顯式構造函數?
- 23. 如何從另一個繼承類調用超級構造函數?
- 24. 檢查構造函數是否在ES6中繼承另一個構造函數
- 25. C++繼承:錯誤C2614調用基類的構造函數
- 26. 是否需要顯式繼承對象?
- 27. 超級類中的java構造函數
- 28. 你什麼時候需要顯式調用超類的構造函數?
- 29. 爲什麼我們需要在JavaScript中調用父構造函數繼承
- 30. 用於繼承的C++構造函數
認爲您想將{}添加到第二個示例中。 – Dykam 2010-06-29 07:57:09