首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在构造对象之前发送对象的引用

在构造对象之前发送对象的引用
EN

Stack Overflow用户
提问于 2012-08-03 04:00:34
回答 7查看 1.7K关注 0票数 63

我在我们的一个应用程序中看到了以下代码:

public class First()
{
      private Second _second;

      public First()
      {
          _second = new Second(this);
          // Doing some other initialization stuff,
      }

}

public class Second
{
    public Second(First f)
    {
    }
}

First()构造函数中,我们在类First()完全构造之前发送它的引用是不是很糟糕?我认为只有当控制逻辑离开构造器时,对象才是完全构造的。

或者这样可以吗?

EN

回答 7

Stack Overflow用户

发布于 2012-08-03 04:09:24

如果您遇到此模式,您可能会检查是否可以将其重构为以下内容:

public class First()
{
      private Second _second;

      public First()
      {
          _second = new Second(this);
          // Doing some other initialization stuff,
      }

      private class Second
      {
          public Second(First f)
          {
          }
      }
}

将依赖项传递到构造函数中意味着两个类之间存在一种紧密耦合,因为First必须相信Second知道自己在做什么,而不会尝试依赖于First的未初始化状态。当Second是一个私有嵌套子类(因此是一个清晰的实现细节)时,或者当它是一个内部类时,这种强耦合更合适。

票数 17
EN

Stack Overflow用户

发布于 2012-08-03 04:05:15

答案是,这取决于。不过,一般来说,由于潜在的后果,这将被认为是一个坏主意。

不过,更具体地说,只要Second在构造之前没有实际使用First中的任何内容,那么就不会有问题。如果你不能以某种方式保证这一点,你肯定会遇到问题。

票数 11
EN

Stack Overflow用户

发布于 2012-08-03 04:05:19

是的,有点糟糕。可以在First完全初始化之前对它的字段做一些事情,这将导致不需要的或未定义的行为。

当你从构造函数中调用一个虚方法时,同样的事情也会发生。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11784878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档