[英]Few questions about constructors in C#
在C#中關於構造函數的繼承:
這些陳述是否更正?
是的,你是對的,構造函數不是繼承的。 因此,只是因為Object
具有無參數構造函數,這並不意味着String
具有無參數構造函數。 從C#4規范的1.6.7.1節:
與其他成員不同,實例構造函數不是繼承的,並且除了在類中實際聲明的實例之外,沒有實例構造函數。 如果沒有為類提供實例構造函數,則會自動提供沒有參數的空構造函數。
是的,派生類構造函數的構造函數鏈將始終通過其基類構造函數...雖然它可能是間接的,因為它可以通過this(...)
鏈接到同一類中的另一個構造函數而不是base(...)
。 如果你沒有指定this(...)
或base(...)
,那就相當於base()
- 在基類中調用無參數構造函數。
有關更多信息,請參閱有關構造函數鏈接的文章 。
1.您不能繼承構造函數,但可以鏈接構造函數。 例:
public class DerivedClass : BaseClass {
public DerivedClass(object arg):base(arg){}
}
2.是的,例如,您無法實例化從具有所有私有構造函數的對象派生的類(Jon在其評論中在下面提到的特定場景中除外) 。 您不能跳過基類的構造函數,但可以有多個重載,並選擇您選擇使用的構造函數。
是的,不知道這個問題是在這里。
1是的
2您不能跳過構造函數,但我認為您在默認構造函數中無能為力。 就像
public class PClass {
protected PClass() {
// do nothing
}
public PClass(int myIntArg) {
// initialize the class
}
}
public Class CClass : PClass {
public CClass(string myStringArg) : base() {
// initialize the class
}
}
3是的。 請參閱我之前的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.