我觉得这是代码味道,我可以做得更好,如果是这样的话,请指出。
class main
{
void main()
{
object A
object B
A = new SystemA(ref B)
B = new SystemB(ref A)
}
}
class SystemA
{
SystemB B;
public SystemA (ref B)
{
this.B = B;
}
}
class SystemB
{
SystemA A;
public SystemA (ref A)
{
this.A = A;
}
}
基本上我需要初始化两个相互引用的类。
这不起作用,并且在初始化后稍后访问它们时,会为两个子类中的类字段生成空引用异常。
我意识到我可以在初始化之后设置这些,但是这会增加一些我想避免的膨胀,因为我将这些分配视为初始化操作。
答案 0 :(得分:3)
如果您提供了实际编译的代码,我怀疑它最终只会SystemA
存储对null
的引用 - 因为当您构造{{1}时,这是B
的值}}
有两个需要相互引用的类肯定是代码味道,但你只是不能使它们彼此引用,除非其中一个构造另一个并传入“这个”,例如
A
现在如果你之后需要访问这两个值,你可以 在其中一个中放置一个属性来访问另一个,或者(这真的很讨厌)使用{{1}构造函数中的参数:
class SystemA
{
private readonly SystemB systemB;
public SystemA()
{
systemB = new SystemB(this);
}
}
class SystemB
{
private readonly SystemA systemA;
public SystemB(SystemA systemA)
{
this.systemA = systemA;
}
}
然后将其称为:
out
请不要这样做。