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
aUser
,它new
s另一个User
ad无限期(或者更确切地说,adStackOverflowException
)。问题是你已经开发了一个无止境的新用户循环。每个新用户都会获得一个新用户作为关联
我将从默认构造函数中删除赋值,然后将其添加为公共属性。这样做将允许您控制何时分配关联,并将防止无休止的循环。是否必须在构建时填充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不能成为关联用户的有效默认值?在关联用户类中,我还需要其他默认值,即使对于未关联的用户也是如此。