0

これは C# の非常に基本的な質問だと思います。私はそれで頭が少し回転していますが、それをソートする正しい方法がわかりません。

get/set プロパティと子クラスを持つ親クラスがあります。クラスのインスタンスがnewを使用して作成された場合、親クラスのプロパティにはアクセスできますが、子クラスにはアクセスできません。C プログラミングでは、このためのメモリ空間を作成する必要があることを覚えていますが、C# でこれを行う正しい方法がわかりません。

親クラス

class Parent_class
{
    private int number;
    public int Number
    {
        get { return number; }
        set { number = value; }
    }
    private Child_class childclass;// = new Child_class();
    public Child_class Childclass
    {
        get { return childclass; }
        set { childclass = value; }
    }
}

子クラス

class Child_class
{
    private int number;
    public int Number
    {
        get { return number; }
        set { number = value; }
    }
}

主要

    static void Main(string[] args)
    {
        Parent_class test = new Parent_class();
        test.Number = 3;            //<--Ok
        test.Childclass.Number = 4; //<--NullReferenceException
    }
4

2 に答える 2

3

特別なことをしていないのであれば、フィールドに支援された getter / setter を使う必要はありません -- コンパイラがそれを作成してくれます。

クラスのインスタンスを取得するには、 を使用する必要がありますnewParent_class子クラスのインスタンスを自動的に持ちたいように見えるので、 constructor.

ああ、Number がうまく機能する理由は、primitiveそれがクラスではなく型だからです。プリミティブ (int、float、bool、double、DateTime、TimeSpan など) は、 を介してインスタンス化する必要はありませんnew

親クラス

public class Parent_class
{
    public Parent_class()
    {
      Childclass = new Child_class();
    }
    public int Number { get; set; }
    public Child_class Childclass { get; set; }
}

子クラス

public class Child_class
{
    public int Number { get; set; }
}

主要

static void Main(string[] args)
{
    Parent_class test = new Parent_class();
    test.Number = 3;            //<--Ok
    test.Childclass.Number = 4;
}
于 2012-07-08T03:24:55.623 に答える
0

Child クラスのインスタンスを作成していません。

以下のいずれかを行うことができます

  1. 使用直前に初期化する

    static void Main(string[] args)
    {
        Parent_class test = new Parent_class();
        test.Number = 3;            //<--Ok
        test.ChildClass = new Child_class(); 
        test.Childclass.Number = 4; //<--NullReferenceException
    }
    

    2. 親ctorで初期化

        public Parent_class()
        {
        Childclass = new Child_class();
        }
    

3. 宣言時にインラインで初期化する

   private Child_class childclass = new Child_class();
于 2012-07-08T04:45:09.580 に答える