簡體   English   中英

隱式調用父構造函數

[英]Implicitly call parent constructors

我有一組類,其中我的基礎有一個構造函數,該構造函數接受一個配置對象並處理將值傳輸到其屬性。

abstract class A { public A(ObjType MyObj){} } 
abstract class B : A {}
class C : A {}
class D : B {}
class E : B {}

是否可以從子類中隱式調用非默認基本構造函數,還是需要通過構造函數在鏈上顯式實現簽名?

abstract class A { public A(ObjType MyObj){} } 
abstract class B : A { public A(ObjType MyObj) : base(MyObj){} }
class C : A { public A(ObjType MyObj) : base(MyObj){} }
class D : B { public A(ObjType MyObj) : base(MyObj){} }
class E : B { public A(ObjType MyObj) : base(MyObj){} }

如果是這樣,最好在基礎中實現一個方法,然后讓我的工廠在創建對象后立即調用該方法?

隱含地 不,構造函數不繼承。 您的類可以顯式調用其父級的構造函數。 但是,如果希望您的類具有與父類相同的構造函數簽名,則必須實現它們。

例如:

public class A
{
    public A(int someNumber)
    {
    }
}

// This will not compile becase A doesn't have a default constructor and B 
// doesn't inherit A's constructors.
public class B : A
{
}

為了使這項工作有效,您必須顯式聲明希望B具有的構造函數,並讓它們顯式調用A的構造函數(除非A當然具有默認構造函數)。

public class B : A
{
    public B(int someNumber) : base(someNumber)
    {
    }
}

不,不可能隱式調用非默認基本構造函數,而必須使其顯式。

您需要在鏈上明確實現它。 同樣,重要的是,在原始代碼中,您將無法調用new B() ,因為A沒有默認的構造函數,而B沒有調用具有arg的A的構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM