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();
        }
    }
}
4

2 に答える 2

4

継承はコンパイル時に行われます。(したがって、'Inherited' にはまだ値がありません) 値は実行時に割り当てられます。

于 2013-10-03T17:11:33.410 に答える
0

クラスからの継承は、継承されたクラスのインスタンス化時にそのクラスの INSTANCE を継承しません。代わりに、そのクラスのインスタンスを渡す必要があります。1 つのオプションは、クラス 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();
    }
}
于 2013-10-03T17:28:00.037 に答える