【问题标题】:will a class be garbage collected if there exists a reference to a method of that class?如果存在对该类的方法的引用,该类是否会被垃圾回收?
【发布时间】:2015-04-15 02:32:38
【问题描述】:
public Messenger(Socket socket, string username)
    {
        sock = socket;
        controller = new SocketHandler.Controller(socket);
        controller.onReceiveData += ParseMessage;
        controller.onCloseConnection += OnCloseConnection;
    }

...

if (game == Messenger.GAME_TOKEN)
        {
            new Messenger(socket, username);
        }

我不想管理对我创建的 Messenger 类的新实例的某些引用。对我添加到控制器中 onCloseConnection Action 的私有方法的引用是否足以防止 Messenger 实例被垃圾收集?

我可以始终保持安全并进行管理,但越简单越好。

【问题讨论】:

  • 我很确定它确实如此,任何引用都会阻止垃圾收集。
  • 类不会被垃圾回收。实例被垃圾回收。
  • 有什么东西阻止你尝试吗?

标签: c# garbage-collection


【解决方案1】:

我重新阅读了您的问题,我认为对MessengerOnCloseConnection 方法的引用将使 Messenger 实例保持活动状态。

【讨论】:

  • 如果方法返回它自己的实例怎么办?然后就可以通过Controller访问了
  • 不确定我是否遵循了这一点。
  • 不小心把信使代替了控制器。因此,Messenger 在其构造函数中创建 Controller 并为 Controller 提供对其方法之一的引用。假设该方法返回 Messenger 的实例。然后它可以从控制器访问,因此可能可以通过其他任何方式访问。
  • 我想我错了。我重新阅读了您的原始帖子,现在我认为如果 OnCloseConnection 是您似乎指出的 Messenger 方法,它将使 Messenger 保持活动状态。
  • 从上下文来看,很明显该方法是一个实例方法。如果它是一个静态方法,它不会让它活着。
猜你喜欢
  • 2021-08-20
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
相关资源
最近更新 更多