2012-02-28 61 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有多个构造函数。然后,您需要确保将代码添加到每个代码中(或者调用简单的构造函数),而如果在代码中设置了代码,那么无论您使用哪个构造函数,它都将被初始化。