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
中使用该实例”,答案就是上面所写的。