2012-07-08 130 views
0

我想這是C#中的一個基本問題。儘管如此,我還是有點頭腦,但我不確定分類的正確方法。NullReferenceException創建新的父類屬性後

我有一個具有get/set屬性和子類的父類。當使用創建類的實例時,可以訪問父類的屬性,但子類不是。我記得在C編程中,您必須爲此創建內存空間,但我不確定在C#中執行此操作的正確方法。

父類

class Parent_class 
{ 
    private int number; 
    public int Number 
    { 
     get { return number; } 
     set { number = value; } 
    } 
    private Child_class childclass;// = new Child_class(); 
    public Child_class Childclass 
    { 
     get { return childclass; } 
     set { childclass = value; } 
    } 
} 

子類

class Child_class 
{ 
    private int number; 
    public int Number 
    { 
     get { return number; } 
     set { number = value; } 
    } 
} 

主要

static void Main(string[] args) 
    { 
     Parent_class test = new Parent_class(); 
     test.Number = 3;   //<--Ok 
     test.Childclass.Number = 4; //<--NullReferenceException 
    } 
+0

您已經創建了一個「Parent_class」實例來使用該類。那麼您的「Child_class」實例在哪裏使用該類?的 – 2012-07-08 03:31:20

+0

可能重複[什麼是.NET一個NullReferenceException?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net) – 2012-07-08 03:36:22

回答

3

你並不需要使用日e如果你沒有做任何特別的事情,那麼現場支持的getter/setter - 編譯器可以爲你創建。

要獲取某個類的實例,您需要使用new。由於它看起來像你想要Parent_class自動有一個子類的實例,你可以在constructor中做到這一點。

噢 - 爲什麼數字工作正常的原因是這是一個primitive類型,而不是一個類。原始數據(int,float,bool,double,DateTime,TimeSpan等)不需要通過new實例化。

父類

public class Parent_class 
{ 
    public Parent_class() 
    { 
     Childclass = new Child_class(); 
    } 
    public int Number { get; set; } 
    public Child_class Childclass { get; set; } 
} 

子類

public class Child_class 
{ 
    public int Number { get; set; } 
} 

主要

static void Main(string[] args) 
{ 
    Parent_class test = new Parent_class(); 
    test.Number = 3;   //<--Ok 
    test.Childclass.Number = 4; 
} 
+0

非常感謝您的回答。它給已經幫助我瞭解那麼一點點的更多信息。 – 2012-07-14 19:30:39

0

您尚未創建Instanc子類的e。

你可以做以下

  1. 初始化任之前使用

    static void Main(string[] args) 
    { 
        Parent_class test = new Parent_class(); 
        test.Number = 3;   //<--Ok 
        test.ChildClass = new Child_class(); 
        test.Childclass.Number = 4; //<--NullReferenceException 
    } 
    

    2。初始化父構造函數

    public Parent_class() 
        { 
        Childclass = new Child_class(); 
        } 
    

3。在聲明時內聯初始化

private Child_class childclass = new Child_class(); 
+0

非常感謝您的回答,特別是這樣做的額外方式。是否有這樣做的一個最佳方法是什麼? – 2012-07-14 19:32:16

+0

是的,這是第二個方式,在構造函數初始化 – Tilak 2012-07-17 10:06:08