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()
};
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()
};