2013-10-03 54 views
2

我想從一個實例化的類繼承。爲什麼在下面的代碼中Inherited的值是空值?有沒有辦法做到這一點?我可以從實例化的類繼承嗎?

namespace Sample { 
    public class Class1 { 
     static void Main() { 
      Class2 SecondClass = new Class2(); 
      SecondClass.StartSomething("hello world"); 
     } 
    } 

    public class Class2 { 
     public string Inherited; 
     public void StartSomething(string value) { 
      Inherited = value; 
      InheritSomething(); 
     } 
     public void InheritSomething() { 
      Class3 ThirdClass = new Class3(); 
      ThirdClass.DoSomething(); 
     } 
    } 

    public class Class3 : Class2 { 
     public void DoSomething() { 
      Console.WriteLine(Inherited);//when complied Inherited is null 
      Console.ReadLine(); 
     } 
    } 
} 
+1

您只能繼承類而不是字符串而不是對象。封裝是一種選擇。 –

+5

繼承是類之間的靜態編譯時間關係,而不是通過調用方法執行的操作。 –

+1

這是有效的封裝,而不是繼承。 –

回答

4

繼承發生在編譯時。 (因此'繼承'還沒有價值) 值在運行時被分配。

0

從類繼承不會在繼承類的實例化時繼承該類的INSTANCE。相反,您需要傳遞該類的實例。一種選擇是將其注入到類3的構造函數中

public class Class1 
{ 
    static void Main() 
    { 
     Class2 SecondClass = new Class2(); 
     SecondClass.StartSomething("hello world"); 
    } 
} 

public class Class2 
{ 
    public string Inherited; 
    public void StartSomething(string value) 
    { 
     Inherited = value; 
     InheritSomething(); 
    } 
    public void InheritSomething() 
    { 
     Class3 thirdClass = new Class3(this); 
     thirdClass.DoSomething(); 
    } 
} 

public class Class3 : Class2 
{ 
    private Class2 _class2; 

    public Class3(Class2 class2) 
    { 
     _class2 = class2; 
    } 

    public void DoSomething() 
    { 
     Console.WriteLine(_class2.Inherited); 
     Console.ReadLine(); 
    } 
}