簡體   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