4

基本クラスと子クラスがあります。基本クラスにはいくつかの変数が含まれ、子にはいくつかの変数が含まれます。

私がする必要があるのは、子クラスのオブジェクトを作成するときに、子オブジェクトの基本クラス変数を設定するコンストラクターに基本クラス オブジェクトを渡すことです。

コード:

public class BaseClass
{
    public int BaseInteger;
    public double BaseDouble;
    public bool BaseBool;
}

public class ChildClass : BaseClass
{
    public ChildClass(BaseClass baseClass)
    {
        this.base = baseClass;     // I am trying to do this.
    }

    public int ChildInteger;
    public string ChildString;
}

私がここでやろうとしていることは可能ですか?どのように?このコードを試したところ、このエラーが発生しました。

Use of keyword 'base' is not valid in this context
4

3 に答える 3

5

が含まれChildClassているのではなく、それを継承していることを認識する必要があります。 BaseClass

thisそのため、基本クラスで定義されたデータとメソッドにキーワード (this.BaseIntegerたとえば)を使用してアクセスできます。

また、それが の を「設定」できない理由でもBaseClassありますChildClass。含まれていません。

それにもかかわらず、あなたがやろうとしていることを達成するためのいくつかの有用なパターンがあります。例えば:

public class BaseClass
{
    protected BaseClass() {}

    protected BaseClass(BaseClass initData)
    {
        this.BaseInteger = initData.BaseInteger;
        this.BaseDouble = initData.BaseDouble;
        this.BaseBool = initData.BaseBool;
    }

    public int BaseInteger;
    public double BaseDouble;
    public bool BaseBool;
}

public class ChildClass : BaseClass
{
    public ChildClass() {}

    public ChildClass(BaseClass baseClass) : base(baseClass)
    {
    }

    public int ChildInteger;
    public string ChildString;
}

@svick の提案に感謝します。

于 2013-06-20T08:00:11.300 に答える
1

最もエレガントな方法は、フィールドを初期化する必要があるインスタンスBaseClassを取るクラスに 2 番目のコンストラクターを作成することだと思います。次に、クラスBaseClassでこの基本コンストラクターを呼び出すだけです。ChildClass

public class BaseClass
{
    public int BaseInteger;
    public double BaseDouble;
    public bool BaseBool;

    public BaseClass()
    {
    }

    public BaseClass(BaseClass baseClass)
    {
        this.BaseInteger = baseClass.BaseInteger;
        this.BaseDouble = baseClass.BaseDouble;
        this.BaseBool = baseClass.BaseBool;
    }
}

public class ChildClass : BaseClass
{
    public int ChildInteger;
    public string ChildString;

    public ChildClass(BaseClass baseClass) : base(baseClass)
    {
    }

}

于 2013-06-20T08:00:58.207 に答える
1
public class BaseClass
{
    public int BaseInteger;
    public double BaseDouble;
    public bool BaseBool;
}

public class ChildClass : BaseClass
{
    public ChildClass(BaseClass baseClass)
    {
        this.BaseInteger = baseClass.BaseInteger;
        this.BaseDouble = baseClass.BaseDouble;
        this.BaseBool = baseClass.BaseBool;
    }

    public int ChildInteger;
    public string ChildString;
}
于 2013-06-20T07:56:11.377 に答える