微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在初始化之前将对象传递给构造函数

如何解决在初始化之前将对象传递给构造函数

| 我有以下问题。这是我拥有的某些类的简单示例(每个类都依赖于其他类)。
public Class1()
{
  public Class1(Class2 class2)
 {

 }
}

public Class2()
{
  public Class2(Class3 class3)
 {

 }
}

public Class3()
{
 public Class1 class1;
 public Class3(Class1 class1)
 {
     this.class1 = class1;
 }
}
然后,我有以下代码初始化对象。
Class1 class1 = null;
Class2 class2 = null;
Class3 class3 = null;

class3 = new Class3(class1);
class2 = new Class2(class3);
class1 = new Class1(class2);

Assert.IsNotNull(class3.class1)
我的问题是,即使class1已被初始化,该assert始终为null。我确实有一个条件是,我只希望每个类创建一个实例。 任何人都可以建议确保断言通过的最佳方法。     

解决方法

        创建class3时,class1未初始化为其对象,因此class3的实例为null。 通过此测试的正确方法是:
Class1 class1 = null;
Class2 class2 = null;
Class3 class3 = null;

class1 = new Class1();
class3 = new Class3(class1);
class2 = new Class2(class3);
class1.Class3 = class3;

Assert.IsNotNull(class3.class1)
    ,        呼叫时,
class1
为null:
class3 = new Class3(class1);
因此,断言自然会失败。您需要实例化class1,然后再尝试将其传递给.5ѭ构造函数。 现在,由于您有循环引用,因此这并非易事。因此,您需要做的是先创建对象,然后修复引用。将构造与引用对其他对象的分配分离。 此外,您不应命名对象实例
class
,因为它们是对象而不是类。区别很重要。     ,        最初,class1变量是空指针。然后,给它分配一些值,参考值将更改。但是class3.class1仍然指向null。 您需要确保引用不变,但它指向的值会改变。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。