2012-08-30 87 views
0

我有一個類(我們稱之爲Class1),它繼承了另一個類(Class2)。 我想要做的是在Class1中繼承Class1時運行costructor方法。初始化一個繼承的類

我想它有是這個樣子:

// Class1 
public class Class1 : Class2 
{ 
    public Class1() 
    { 

    } 
} 
// Class2 
public class Class2 
{ 
    public Class2() 
    { 
     //this is the function I want to run 
    } 
} 

但我不能讓它這樣的工作。
有沒有辦法做到這一點,而實際上不必從Class1調用Class2()構造方法?

+0

構造函數不是方法或函數,它們只是構造函數。 – Servy

回答

6

你正在聲明你的構造函數不正確。刪除void關鍵字:

// Class1 
public class Class1 : Class2 
{ 
    public Class1() 
    { 

    } 
} 
// Class2 
public class Class2 
{ 
    public Class2() 
    { 
     //this is the function I want to run 
    } 
} 

基類的默認構造函數將自動運行。如果你想調用非默認的構造函數,你可以做這樣的:

// Class1 
public class Class1 : Class2 
{ 
    public Class1() : base("argument") 
    { 

    } 
} 
// Class2 
public class Class2 
{ 
    public Class2() 
    { 
    } 
    public Class2(string theParameter) 
    { 
     //code for initializing the object with the string parameter 
    } 
} 
+0

對不起,這就是我的代碼。我只是簡單地在這裏添加它們而沒有想到但這不適合我。 –

+0

@GabiBarrientos你怎麼知道它不工作?您發佈的代碼(使用'void'關鍵字)將無法編譯。你的代碼是不能編譯的,還是編譯不了,但是不能按照你的預期工作? – phoog

+0

,因爲我試圖運行Debug.WriteLine(「測試」);在Class2的構造函數中。但是使用你寫下的第二段代碼實際上適用於我。謝謝。我會接受這個作爲我的答案,但我需要等待幾分鐘 –

0

您隨時來電Class2的構造。如果您沒有代碼調用base()它爲您添加。如果Class2沒有無參數構造函數,並且沒有明確調用基構造函數,則會出現編譯錯誤。

如果你有一個Class1你必須有一個Class2構建;如果首先沒有Person,則不能有C_Sharp_Developer

+1

第一段應以「...您得到編譯器錯誤」結尾。 (並且,想一想,條件應該是「如果'Class2'沒有*可訪問的*無參數構造函數...」) – phoog

+0

@phoog我改變了「編譯錯誤」位,因爲這就是我的意思來寫。我會留下關於可訪問性的觀點,以便在我沒有的時候,您的評論可以與您的想法保持一致;) –