2011-03-17 72 views
7

如何以及何時調用基類的構造函數在C#如何以及何時調用C#基類構造函數

+0

[在C#中調用基類的構造(可能重複http://stackoverflow.com/questions/12051/calling-base-constructor-in- c)和[C#調用基類構造函數](http://stackoverflow.com/questions/4212624/c-calling-base-class-constructor) – 2011-03-17 06:09:36

回答

14

你可以調用基類的構造函數是這樣的:

// Subclass constructor 
public Subclass() 
    : base() 
{ 
    // do Subclass constructor stuff here... 
} 

你會召喚基類,如果有所有子類需要設置的東西。需要初始化的對象等...

希望這有助於。

+5

你也可以像這樣調用基類構造函數:'public Subclass() {}' - 這與您的示例具有完全相同的行爲。 – 2011-03-17 06:16:15

7

從子類構造函數調用基類構造函數通常是一種很好的做法,以確保基類在您的子類之前進行初始化。您可以使用base關鍵字來調用基類構造函數。請注意,您也可以使用this關鍵字在您的班級中調用另一個構造函數。

下面是關於如何做到這一點的例子:

public class BaseClass 
{ 
    private string something; 

    public BaseClass() : this("default value") // Call the BaseClass(string) ctor 
    { 
    } 

    public BaseClass(string something) 
    { 
     this.something = something; 
    } 

    // other ctors if needed 
} 

public class SubClass : BaseClass 
{ 
    public SubClass(string something) : base(something) // Call the base ctor with the arg 
    { 
    } 

    // other ctors if needed 
} 
+6

這不僅僅是一個好習慣,它還是編譯器強制執行的要求。 [基礎構造函數會被調用,不管你喜不喜歡。](http://stackoverflow.com/questions/3265958/how-can-i-tell-the-inheriting-class-to-not-call-its- base-class-parameter-less-co) – 2011-03-17 06:15:03

+1

好點...如果你沒有明確地調用特定的ctor,它會調用默認的ctor。 – 2011-03-17 06:16:40

+0

在Flash/AS3中,您可以在子類構造函數中工作,然後在中途調用「super()」來運行基類構造函數,然後在子類構造函數中繼續使用更多代碼。在C#中,在子類構造函數的任何代碼運行之前,您都必須先調用基類構造函數。 – Triynko 2016-01-22 19:51:08

相關問題