Q
繼承在C#
4
A
回答
10
的差異之間的區別在於,在你的第一個代碼段,我們在調用參數的基類構造函數,而在你的第二個使用參數調用基類構造函數的代碼片段。
你的基類,可以被定義爲如下:
class qwe{
public qwe(){ /* Some code */ }
public qwe(SomeAnotherclass ac){ /* Some other code */ }
}
您abc
類的默認構造函數長相酷似以下內容:
class abc{
public abc() : base() {}
}
0
首先是一類基礎是qwe
。第二個是相同的,但它也有構造函數,在調用時從基類執行指定的構造函數(具有不同的參數,然後是默認的構造函數)。
第二個片段顯示了當基類沒有默認構造函數時如何處理這種情況。這個要求的原因是派生類構造函數總是首先調用基類構造函數。如果基礎構造函數需要一些參數,那麼你必須以爆炸性的方式調用它。
0
當涉及到繼承,兩者是相同的:ZXC is_a QWE
在第二個例子中,你簡單地定義空ZXC構造與你生成一個參數之前調用QWE構造(someAnotherclass() )。這通常意味着一個聚合,如果你保留引用的地方,而不是繼承。
0
結果將是相同的。
通過在zxc上調用構造函數,您可以添加一些功能並調用基礎構造函數。
0
在第二個代碼片段中,您是chaining繼承的基類的構造函數的缺省(無參數)構造函數,該構造函數接受someAnotherClass
參數。
當初始化zxc類時,這將調用qwer的新構造函數someAnotherClass
。
在第一個代碼片段中,沒有一個構造函數鏈正在發生。
0
也許你的意思是
class abc : qwe
{
}
和
class zxc : qwe
{
public zxc() : base(new someAnotherClass()).
{
}
}
這意味着
class qwe
{
// public constructor accepting SomeAnotherType
public qwe(SomeAnotherType someAnotherClass)
{
}
}
這種方法被稱爲nested constructor call
或constructor chaining
相關問題
- 1. 在繼承C++
- 2. Java繼承與C#繼承
- 3. C#多繼承
- 4. (un)繼承C#
- 5. C++鏈繼承
- 6. C#TabPage繼承
- 7. 繼承與C#
- 8. C#ASP.NET繼承
- 9. C++繼承
- 10. C++繼承-QList
- 11. C#繼承
- 12. C++多繼承
- 13. C++繼承「toString」
- 14. 繼承和C++
- 15. C#類繼承
- 16. C++虛繼承
- 17. 繼承 - C++
- 18. 繼承類。 C++
- 19. C++繼承型
- 20. Objective C繼承
- 21. C++繼承
- 22. C#EF繼承
- 23. 多繼承C++
- 24. C++多繼承
- 25. C#繼承類
- 26. Objective-C繼承
- 27. 類繼承C++
- 28. c#繼承類
- 29. 不承認C++繼承
- 30. C++繼承不承認類