class 声明为 class 时对象为 null c#

class object null when declare is a class c#

public class s
{
    public string s1 { get; set; }
}

public class s2
{
    public s s3 { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        s2 objs2 = new s2();
        objs2.s3.s1 = "asdf";
    }
}

出现运行时错误,因为 objs2.s3 为空。我想知道如何实现这一目标。

如果您有时间,也请告诉我为什么会这样。 谢谢。

您实际上从未在任何地方初始化 s3。如果你总是希望它默认为s的新实例,你可以创建一个构造函数:

public class s2
{
    public s2()
    {
        s3 = new s();
    }
}

s2 objs2 = new s2();

或者,如果你不想修改s2,你可以在实例化对象时简单地初始化值:

s2 objs2 = new s2 { s3 = new s() };

class s 可以为 null,因此 s3 属性 默认为 null。使用前需要实例化。

一种方法是让 class s2 的构造函数为您创建一个实例。

它将变成:

public class s2
{
    public s s3 { get; set; }
    public s2()
    {
      s3 = new s();
    }
}

为了让您的代码正常工作,您需要使用 new 运算符初始化 s2 实例的 s3 属性,因为它是引用类型(check reference vs value types here).

这是您缺少的行:

s2.s3 = new s();

这里是 运行 正确的完整代码:

public class s
{
    public string s1 { get; set; }
}

public class s2
{
    public s s3 { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        s2 objs2 = new s2();
        s2.s3 = new s();
        objs2.s3.s1 = "asdf";
    }
}

除其他答案外,您还可以在 Main() 中初始化 s3。

s2 objs2 = new s2()
{
    s3 = new s()
};