C#do嵌套类需要实例化吗?

时间:2010-05-17 22:13:15

标签: c#

在以下情形中:

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
   {

   }
}

4 个答案:

答案 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,否则不需要构造一个。