2010-06-29 9 views

回答

3

如果未提供,則默認(無參數)構造函數將自動被調用。

換句話說,這些是等效

public Foo() : base() {} 

public Foo() {} 

假設Foo的基部具有一個參數的構造函數。

在另一方面,如果基礎有這樣參數的構造函數:

protected MyBase(IBar bar) {} 

然後

public Foo() {} 

無法編譯。在這種情況下,你必須用適當的參數明確地調用基礎 - 例如

public Foo(IBar bar) : base(bar) {} 
+0

認爲您想將{}添加到第二個示例中。 – Dykam 2010-06-29 07:57:09

0

如果基類有一個默認構造函數會自動調用。如果沒有默認構造函數,則必須明確調用一個構造函數。

0

如果不指定基類的默認構造函數,它將自動調用。

示例代碼:

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,即使ClassA的構造並沒有明確ClassB的調用。

相關問題