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为null而导致运行时错误。我想知道如何实现这一目标。
请告诉我为什么会这样,所以如果你有时间的话。 感谢。
答案 0 :(得分:3)
您永远不会在任何地方实际初始化s3
。如果您始终希望它默认为s
的新实例,则可以创建构造函数:
public class s2
{
public s2()
{
s3 = new s();
}
}
s2 objs2 = new s2();
或者,如果您不想修改s2
,则只需在实例化对象时初始化该值:
s2 objs2 = new s2 { s3 = new s() };
答案 1 :(得分:1)
类s可以为空,因此默认情况下s3属性为null。您需要在使用前对其进行实例化。
一种方法是让类s2的构造函数为你创建一个实例。
然后会变成:
public class s2
{
public s s3 { get; set; }
public s2()
{
s3 = new s();
}
}
答案 2 :(得分:1)
为了使您的代码有效,您需要使用s3
运算符初始化s2
实例的new
属性,因为它是引用类型(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";
}
}
答案 3 :(得分:1)
除了另一个答案,你可以在Main()中使用s3。
s2 objs2 = new s2()
{
s3 = new s()
};