C# 在自己的构造函数中初始化新类

C# 在自己的构造函数中初始化新类,c#,properties,class-design,C#,Properties,Class Design,我有一个用户类。其中一个属性必须是“关联”用户,因此其类型必须是用户。现在,当我初始化该类时,当它尝试初始化相关属性时,会出现堆栈溢出。当前代码: public class User { public User() { this.Associated = new User(); } public User Associated { get; set; } } 这是可行的还是我选错了树?不要初始化构造函数中的关联成员。如果您只在需要时初始化它,我认为堆栈

我有一个用户类。其中一个属性必须是“关联”用户,因此其类型必须是用户。现在,当我初始化该类时,当它尝试初始化相关属性时,会出现堆栈溢出。当前代码:

public class User {
    public User() {
        this.Associated = new User();
    }

    public User Associated { get; set; }
}

这是可行的还是我选错了树?

不要初始化构造函数中的关联成员。如果您只在需要时初始化它,我认为堆栈溢出应该消失。

您正在递归调用
用户
构造函数。每次你
new
a
User
,它
new
s另一个
User
ad无限期(或者更确切地说,ad
StackOverflowException
)。

问题是你已经开发了一个无止境的新用户循环。每个新用户都会获得一个新用户作为关联


我将从默认构造函数中删除赋值,然后将其添加为公共属性。这样做将允许您控制何时分配关联,并将防止无休止的循环。

是否必须在构建时填充User.Associated?如果从构造函数中删除赋值,则不应得到这样的结果


您之所以获得SO,是因为当您构造一个
User()
时,它构造了一个
User()
,这反过来又构造了一个
User()
,而它一直都是海龟。

您可以为聚合的
User
类使用一个延迟加载的方法,而不是在构造函数中初始化它:

public class User {
    private User _user;

    public User Associated 
    { 
        get
        {
            if (_user == null)
                _user = new User();
            return _user;
        }
    }
}

在构造函数中调用构造函数会导致无限循环:

创建一个新的
用户
实例->创建一个新的
用户
实例->创建一个新的
用户
实例->创建一个新的
用户
实例->创建一个新的
用户
实例

你可以这样做:

public class User {
    public User() {

    }

    public AddAssociatedUser() {
        this.Associated = new User();
    }

    public User Associated { get; set; }
}

并在需要时调用
AddAssociatedUser

为什么null不能成为关联用户的有效默认值?在关联用户类中,我还需要其他默认值,即使对于未关联的用户也是如此。