我认为这是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
}
答案 0 :(得分:3)
如果你没有做任何特别的事情,你不需要使用字段支持的getter / setter - 编译器可以为你创建。
要获取类的实例,您需要使用new
。由于看起来您希望Parent_class
自动拥有子类的实例,您可以在constructor
中执行此操作。
哦 - 而且数字工作正常的原因是primitive
类型,而不是类。 Primitives,(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;
}
答案 1 :(得分:0)
您尚未创建Child类的实例。
您可以执行以下任一操作
在使用前初始化
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();