2010-08-11 79 views

回答

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 callconstructor chaining