您可以在构造函数中实例化另一个类吗?

时间:2019-05-14 09:26:05

标签: c# constructor initialization

您可以在构造函数中实例化另一个类吗?如果不是,那为什么呢?

public class Class1() {}

public class Class2() {

    public Class2() {

    Class1 c1 = new Class1();

    }
}

2 个答案:

答案 0 :(得分:2)

是的,但是让我澄清一下,因为您似乎是个初学者(顺便欢迎您的到来):您实例化了Class1 object 。类不能实例化。在您的示例中,该对象是一个局部变量,一旦执行了构造函数中的所有代码,该局部变量将被销毁。实际上,这意味着您只能在构造函数内部之外的任何地方使用c1。您可以通过在类主体中将其声明并将其存在与{的对象的存在性联系起来,使其成为Class2成员(特别是字段)。 {1}},例如:

Class2

这允许public class Class1() { } public class Class2() { Class1 c1; public Class2() { c1 = new Class1(); } } 在类内部的任何地方使用。

答案 1 :(得分:1)

是的,您绝对可以在另一个类的构造函数方法中实例化一个类。您面临的问题是可变范围,即在何处不能使用/访问它。您需要在要使用它的“区域”中定义变量,即在您的类,构造函数,方法,属性等中定义。使用原始文章中的代码,我将尝试进行解释。

要实例化的类:

public class Class1()
{
}

执行实例化的类:

public class Class2()
{
     public Class2()
     {
          Class1 c1 = new Class1();
     }
}

由于变量c1是在构造函数中定义的,因此无法在任何地方使用。您只能在此构造函数中使用它,因为这是定义它的地方。

如果您希望能够在Class2的其他地方使用它,那么我建议您在构造函数之外定义它,如下所示。这样,您可以在Class2中的任何地方使用它:

public class Class2()
{
     Class1 c1 = null;

     public Class2()
     {
          // You can instantiate it in the constructor
          c1 = new Class1();
     }
}

或者您也可以在Class2中的方法中使用它,例如:

public class Class2()
{
     Class1 c1 = null;

     public void Method1()
     {
          // You can instantiate it in the method
          c1 = new Class1();
     }
}

随便看看,看看什么对您有用。我通常在要使用它的地方实例化一个类。例如,如果我需要一个方法中的Class1,那么这里就是我要定义和实例化它的地方:

public class Class2()
{
     public void Method1()
     {
          Class1 c1 = new Class1();
     }
}

我希望这会有所帮助。