在自己的构造函数中初始化一个新类
我有一个用户类。其中一个属性需要是“关联”用户,因此它的类型需要为User。现在,当我初始化这个类时,当它尝试初始化Associated属性时,会发生堆栈溢出。当前代码:在自己的构造函数中初始化一个新类
public class User {
public User() {
this.Associated = new User();
}
public User Associated { get; set; }
}
这是可行的还是我在吠叫错误的树?
你可以使用延迟加载的方法为您汇总User
类,并在构造函数中未初始化:
public class User {
private User _user;
public User Associated
{
get
{
if (_user == null)
_user = new User();
return _user;
}
}
}
接受为我提供我需要的解决方法。谢谢。 –
不要在构造函数中初始化Associated成员。如果您只是在需要时初始化它,我认为堆栈溢出应该消失。
您正在递归调用User
构造函数。每当您无限期地(或更确切地说,广告StackOverflowException
)new
一个User
,它new
的另一个User
。
问题是,你已经开发了一个无限循环的新用户。每个新用户都会获得一位新用户作为员工。
我会从默认的构造函数中删除该分配,然后将其作为公共属性添加。这样做可以让您控制何时分配联系人,并防止无限循环。
User.Associated是否必须在施工时填充?如果你从构造函数中删除了这个赋值,你就不应该得到它。
你得到一个SO的原因是因为当你构建一个User()
时,它构造了一个User()
,这反过来构成了一个User()
,它一直是乌龟。
对于一个好的答案和海龟比喻+1! –
调用构造内部构造带你到一个无限循环:
创建新的User
实例 - >创建新的User
实例 - >创建新的User
实例 - >创建新的User
实例 - >创建新的User
实例 - >创建新的User
实例...
你可以做这样的事情:
public class User {
public User() {
}
public AddAssociatedUser() {
this.Associated = new User();
}
public User Associated { get; set; }
}
,并调用AddAssociatedUser
当你需要它。
为什么不能为您的关联用户的有效默认值? – user957902
即使对于未关联的用户,在我所需的关联User类中还有其他默认值。 –