[英]How do I find which nested namespace to import in C# for the classes I need in my code?
[英]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.