繁体   English   中英

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

[英]C# do nested classes need to be instantiated?

在以下场景中:

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
   {

   }
}

在声明的范围类中无关紧要 - 您应该始终以相同的方式使用类:在与特定类实例交互之前,您必须使用new运算符创建它。

是的,与基类不同,如果您希望使用它,则需要实例化内部类。

你可以通过尝试来很容易地证明这一点:

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作为类型名称。

在这种情况下,答案不依赖于类在外部类中定义的事实。 因为您使用了自动getter / setter,所以属性Ic使用隐藏的后备字段。 与所有引用类型字段一样,此字段的默认值为null 因此,如果您尝试访问Ic的成员而不将其设置为引用某个实例,则可能会出现NullReferenceException

即使在其他地方定义了innerClass ,我刚才所说的一切仍然是真的。

不,该属性是该类的实例。 无论如何,该集合将设置一个新实例。 除非你想确保get永远不会返回null,否则不需要构造一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM