Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/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#_Constructor_Initialization - Fatal编程技术网

C# 你能在构造函数中实例化另一个类吗?

C# 你能在构造函数中实例化另一个类吗?,c#,constructor,initialization,C#,Constructor,Initialization,你能在构造函数中实例化另一个类吗?若否,原因为何 public class Class1() {} public class Class2() { public Class2() { Class1 c1 = new Class1(); } } 是的,但是让我澄清一下,因为你看起来是个初学者(顺便说一句,欢迎加入):你实例化了Class1的对象。类不能被实例化。在您的示例中,该对象是一个局部变量,一旦构造函数中的所有代码都被执行,它就会被销毁。实际上,这意味着您只

你能在构造函数中实例化另一个类吗?若否,原因为何

public class Class1() {}

public class Class2() {

    public Class2() {

    Class1 c1 = new Class1();

    }
}

是的,但是让我澄清一下,因为你看起来是个初学者(顺便说一句,欢迎加入):你实例化了
Class1
对象。类不能被实例化。在您的示例中,该对象是一个局部变量,一旦构造函数中的所有代码都被执行,它就会被销毁。实际上,这意味着您只能在构造函数内部的任何地方使用
c1
。您可以通过在类主体中声明它并将其存在绑定到
Class2
的对象,使其成为
Class2
的成员(特别是字段),例如:

public class Class1() { }

public class Class2() 
{
    Class1 c1;

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

这允许
c1
在类中的任何位置使用。

是的,您肯定可以在另一个类的构造函数方法中实例化一个类。您所面临的问题是可变范围,即在哪里可以使用/访问它。你需要在你想要使用它的“区域”中定义变量,即在你的类、构造函数、方法、属性等中。使用你的原始帖子中的代码,我将尝试解释

要实例化的类:

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();
     }
}

我希望这能有所帮助。

答案是。。。对下一个问题?你试过了吗?如果不是,为什么不呢?试一试不是更容易、更快吗?这个代码有什么特别的问题吗?我不能在代码的任何地方使用c1。看起来构造函数实际上并没有启动Class1。因为c1在您的案例中是一个方法变量是的!这是我的问题!我试图在构造函数之外使用c1,但没有成功。我知道这是一个愚蠢的例子,但我不明白为什么它不应该工作。“谢谢你的帮助。我理解你的担心,但由于OP似乎是一个初学者,我更愿意和蔼可亲,”斯塔克劳埃德说,因为这个问题表明海报完全没有努力,甚至不是他们试图解决的问题。回答这个问题的正确途径应该是让海报去学习一些基本的C#技能。我同意戴维格学习一些基础知识。无论如何,当OP将所有信息都包含在问题中时,这个问题就可以回答了,这通常是由评论提供的。尤其是OP想要访问构造函数外部的
c1
这一事实似乎是一个非常具体的问题,因此可以在这里发布。但是,这应该在问题本身中提供。或者换句话说:发布的问题是“我可以这样做吗?”这很容易用“是”来回答。实际的问题是“如何在
Class2
中使用该实例”,答案就是上面所写的。