在以下情形中:
public class outerclass
{
public innerClass Ic
{get;set}
public class innerClass
{
}
}
在为其赋值之前,是否需要实例化内部类属性,如此?
public class outerclass
{
public outerclass()
{
this.Ic = new innerClass();
}
public innerClass Ic
{get;set}
public class innerClass
{
}
}
答案 0 :(得分:9)
在声明的范围类中无关紧要 - 您应该始终以相同的方式使用类:在与特定类实例交互之前,您必须使用{{1> 创建它运营商。
答案 1 :(得分:2)
是的,与基类不同,如果你想使用它,你需要实例化一个内部类。
通过尝试,你可以很容易地证明这一点:
public class OuterClass
{
public InnerClass Ic { get; set; }
public class InnerClass
{
public InnerClass()
{
Foo = 42;
}
public int Foo { get; set; }
}
}
public class Program
{
static void Main()
{
Console.WriteLine(new OuterClass().Ic.Foo);
}
}
上面的代码抛出NullReferenceException,因为尚未分配Ic
。
我还建议您遵循Microsoft命名约定并使用pascal case作为类型名称。
答案 2 :(得分:1)
在这种情况下,答案不依赖于类在外部类中定义的事实。由于您使用了自动getter / setter,因此属性Ic
使用隐藏的后备字段。与所有引用类型字段一样,此字段的默认值为null
。因此,如果您尝试访问Ic
的成员而未将其设置为引用某个实例,则可以预期NullReferenceException
。
即使在其他地方定义了innerClass
,我刚才所说的一切仍然是真的。
答案 3 :(得分:-1)
不,该属性是该类的实例。无论如何,该集合将设置一个新实例。除非你想确保get永远不会返回null,否则不需要构造一个。