[英]C# in VS2005: will this() execute the base constructor code for an inherited class?
[英]C# in VS2005: in an inherited class, do you need to explicitly call the super-constructor?
如果您使用C#(VS2005)繼承了一個類,是否需要顯式調用更高類的構造函數,還是會自動調用它?
如果未提供,則默認(無參數)構造函數將自動被調用。
換句話說,這些是等效的 :
public Foo() : base() {}
和
public Foo() {}
假設Foo的基具有無參數構造函數。
另一方面,如果基礎僅具有帶有如下參數的構造函數:
protected MyBase(IBar bar) {}
然后
public Foo() {}
不會編譯 。 在這種情況下,您必須使用適當的參數顯式調用基數-例如
public Foo(IBar bar) : base(bar) {}
如果基類具有將自動調用的默認構造函數。 如果沒有默認構造函數,則必須顯式調用一個構造函數。
如果不指定基類的默認構造函數,則將自動調用該基類的默認構造函數。
示例代碼:
public class ClassA
{
protected bool field = false;
public ClassA()
{
field = true;
}
}
public class ClassB : ClassA
{
public ClassB()
{
}
public override string ToString()
{
return "Field is " + field.ToString();
}
}
class Program
{
static void Main(string[] args)
{
ClassB target = new ClassB();
Console.WriteLine(target.ToString());
Console.ReadKey();
}
}
這將顯示“字段”值設置為true,即使ClassB沒有顯式調用ClassA構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.