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——编译器可以为你创建。

要获取类的实例,您需要使用new. 由于看起来您希望Parent_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

您还没有创建子类的实例。

您可以执行以下任一操作

  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. 在声明时初始化 inline

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