两个带有构造函数的类,它们相互引用?

时间:2011-07-06 18:20:01

标签: .net-3.5 c#-4.0

我觉得这是代码味道,我可以做得更好,如果是这样的话,请指出。

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;
  }
}

基本上我需要初始化两个相互引用的类。

这不起作用,并且在初始化后稍后访问它们时,会为两个子类中的类字段生成空引用异常。

我意识到我可以在初始化之后设置这些,但是这会增加一些我想避免的膨胀,因为我将这些分配视为初始化操作。

1 个答案:

答案 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

请不要这样做。