C#为类本身中的同一类创建对象

C#为类本身中的同一类创建对象,c#,.net,C#,.net,我只是在c#中尝试一些东西,我遇到了这个问题,我在类本身中为同一个类创建了一个对象 class Class1 { public int test1 { get; set; } Class1 x = new Class1(); } 然后我尝试从另一个抛出错误的类创建对象 “System.StackOverflowException”类型的未处理异常 发生在Test.exe中 我已经搜索过了,我没有发现任何与C语言相关的链接,但是我在C++中找到了,

我只是在c#中尝试一些东西,我遇到了这个问题,我在类本身中为同一个类创建了一个对象

class Class1
    {
        public int test1 { get; set; }
        Class1 x = new Class1();
    }
然后我尝试从另一个抛出错误的类创建对象

“System.StackOverflowException”类型的未处理异常 发生在Test.exe中


我已经搜索过了,我没有发现任何与C语言相关的链接,但是我在C++中找到了,他们说Case1是不完整的类型,因为它还没有被定义,而是被定义了。我想知道c的情况是否也一样,它创建了一个

Class1
,它创建了另一个
Class1
,它创建了另一个
Class1
,它创建了另一个
Class1

因此,每个构造函数调用都会添加到执行堆栈中,直到溢出为止

由于您没有指定要对实例执行的操作,因此无法知道正确答案是什么


对于极客的幽默,谷歌很简单,你的问题是每次你创建一个
Class1
,这个对象就会创建它自己的
Class1
。因此,你将递归,直到你爆炸


您可以调试它并观察发生了什么。在
Class1
的某个地方设置一个断点,观察它被反复击中。

一个类可以包含自己的对象,但不能在构造函数中或在声明时实例化该对象。这将导致无限递归和
StackOverflow
异常

您可以使用单独的方法进行实例化,如:

class Class1
{
    public int test1 { get; set; }
    private Class1 x;

    public void CreateClass1()
    {
        x = new Class1();
    }
}
然后像这样称呼它:

Class1 obj = new Class1();
obj.CreateClass1();

在创建
Class1
实例的过程中,不要创建
Class1
的实例。改为放置占位符:

class Class1
{
    public int test1 { get; set; }
    public Class1 AnotherClass1;
}
并在创建后或创建期间作为构造函数参数提供对另一个(已创建的实例)的引用:

static void Main(string[] args)
{
    Class1 x = new Class1();
    x.AnotherClass1 = new Class1();
}

只是好奇为什么要在对象的每个实例中创建一个
new Class1()
?这背后没有真正的原因。我刚刚试着看看会发生什么。它与一个接口一起工作。看我的答案。这样创作是一种好的实践吗?我们什么时候可以这样写?请提供一个有效且良好的示例(真实场景)好吗?关于不启动嵌套类的想法会有所不同,其他答案中没有提到。
static void Main(string[] args)
{
    Class1 x = new Class1();
    x.AnotherClass1 = new Class1();
}