[英]How do i change the call order of nested constructors (child before abstract parent)
[英]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.