2013-10-03 3 views
2

Я пытаюсь наследовать от экземпляра класса. Почему значение Inherited, в коде ниже, значение null? Есть ли способ сделать это правильно?Могу ли я наследовать от экземпляра класса?

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

Inheritance - это статическое отношение времени компиляции между классами, а не то, что вы делаете, путем вызова методов. –

+1

Это эффективно инкапсуляция, а не наследование. –

ответ

4

Inheriting происходит во время компиляции. (Поэтому «Inherited» еще не имеет значения) Значения назначаются во время выполнения.

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(); 
    } 
} 
Смежные вопросы