在自己的构造函数中初始化一个新类

Mic*_*zoe 5 c# class-design properties

我有一个User类.其中一个属性需要是"关联"用户,因此它的类型需要是User.现在,当我初始化类时,我尝试初始化Associated属性时会出现堆栈溢出.当前代码:

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

    public User Associated { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是可行的还是我在错误的树上吠叫?

Ant*_*ile 8

User.Associated是否必须在建设中填充?如果从构造函数中删除赋值,则不应该得到SO.

你得到一个SO的原因是因为当你构造一个User()它构造一个User()反过来构造一个User()并且它一直是乌龟的时候.


CAb*_*ott 4

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

public class User {
    private User _user;

    public User Associated 
    { 
        get
        {
            if (_user == null)
                _user = new User();
            return _user;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)