2012-02-28 62 views
2

是什麼實例化這樣一個對象的新實例之間的區別:不同的方式來實例化一個對象

public class MyClass 
{ 
    private Order order; 

    public MyClass() 
    { 
     order = new Order(); 
    } 

    public void MethodOne() 
    { 
     order.CreateOrder(); 
    } 

    public void MethodTwo() 
    { 
     order.RemoveOrder(); 
    } 

    public void Dispose(); 
    { 
     order.Dispose(); 
    } 
} 

MethodOne和MethodTwo仍然使用相同的對象:

public class MyClass 
{ 
    private Order order = new Order(); 

    public void MethodOne() 
    { 
     order.CreateOrder(); 
    } 

    public void MethodTwo() 
    { 
     order.RemoveOrder(); 
    } 

    public void Dispose(); 
    { 
     order.Dispose(); 
    } 
} 

這對?不管我用哪種方式?

+0

請添加語言標籤。 (?JAVA) – Mat 2012-02-28 11:00:57

+0

對不起,增加了一個(C#) – CallumVass 2012-02-28 11:03:08

+2

我覺得這是這個問題的一個副本:http://stackoverflow.com/questions/298183/c-sharp-member-variable-initialization-best-practice – 2012-02-28 11:06:38

回答

2

這提供了對象order的默認值。

private Order order = new Order(); 

想象一下,你有一流幾個構造函數,使用其中的任何仍將使你order對象初始化實例。


如果您在構造函數初始化對象,該對象order爲空引用,直到它自己初始化(就像你在構造函數中做的)。

現在記住,如果添加另一個構造器,你將有它,無論是通過調用默認構造函數初始化對象order爲好,或通過初始化像你正在做的:

public class MyClass 
{ 
    private Order order; 

    public MyClass() 
    { 
     order = new Order(); 
    } 

    public MyClass(string name) 
     : this() // either call the default constructor 
    { 
     // or initialize explicitely 
     order = new Order(); 
    } 

} 
+0

關於多重構造函數的好處,謝謝你的回答! – CallumVass 2012-02-28 11:13:39

0

Imho,在提到的結構中沒有真正的區別。

1

在實踐中,上述內容將是相同的。不同的主要時間是如果MyClass有多個構造函數。然後,您需要確保將代碼添加到每個代碼中(或者調用簡單的構造函數),而如果在代碼中設置了代碼,那麼無論您使用哪個構造函數,它都將被初始化。