Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实例化对象的不同方法_C#_Oop - Fatal编程技术网

C# 实例化对象的不同方法

C# 实例化对象的不同方法,c#,oop,C#,Oop,实例化如下对象的新实例之间有什么区别: public class MyClass { private Order order = new Order(); public void MethodOne() { order.CreateOrder(); } public void MethodTwo() { order.RemoveOrder(); } public void Dispose();

实例化如下对象的新实例之间有什么区别:

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

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

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

    public void Dispose();
    {
        order.Dispose();
    }
}
这是:

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仍然使用同一个对象,对吗?无论我使用哪种方式?

Imho,所提到的构造都没有真正的区别。

这为对象的顺序提供了一个默认值

private Order order = new 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();
    }

}

实际上,上述情况是相同的。主要的区别在于MyClass是否有多个构造函数。然后,您需要确保将代码添加到每个构造函数中(或调用简单构造函数),而如果在delcaration中设置了代码,则无论您使用哪个构造函数,都会对其进行初始化。

请添加语言标记。(Java?)我认为这是这个问题的重复:在这两种情况下,您都可以将readonly添加到order声明中。关于多个构造函数的观点很好,谢谢您的回答!