gpt4 book ai didi

c# - GC会收集一个带有函数指针的对象吗?

转载 作者:太空宇宙 更新时间:2023-11-03 22:23:28 26 4
gpt4 key购买 nike

只是一个简短的问题。首先,让我验证一下函数指针的含义是否正确。对于 C#,函数指针基本上只是一个事件函数,对吗?

其次,考虑以下片段:

public FormAnimator(Form form) 
{
this.m_Form = form;
this.m_Form.Load += new EventHandler(m_Form_Load);
this.m_Form.VisibleChanged += new EventHandler(m_Form_VisibleChanged);
this.m_Form.Closing += new CancelEventHandler(m_Form_Closing);
}

其中 m_Form 是类型的私有(private)变量

   //The form to be animated. 
private Form m_Form;

类是如何实例化的:

public partial class toastform : Form
{
public toastform(skImage ic) : this() {

//Attach this form to the Formanimator.
//The FormAnimator now has a reference to this toastform.
//When the load() of this form is invoked, the Form animator intercepts it and displays the form.
this.m_Animator = new FormAnimator(this, FormAnimator.AnimationMethod.Slide, FormAnimator.AnimationDirection.Up, 400);

}

因此,当我创建一个新的 toastform(使用 something = new toastform();)并调用 Show() 时,show 方法应该是来自表单动画师的方法。现在,当 toastform 关闭时,我如何确保 FormAnimator 对象也被销毁。如果有人可以解释正在发生的事情的全部故事,我将不胜感激。我的意思是.. toastform 类和 formanimator 类都指向同一个对象,当我说表单动画师“拦截”taostform 的事件等等时,我的行话是正确的..

谢谢

tldr:我只需要知道是否需要手动删除 Formanimator 类中事件的处理程序。

最佳答案

在您的Dispose 函数中,您应该分离您的函数引用。

protected override Dispose(bool disposing)
{
....

this.m_Form.Load -= new EventHandler(m_Form_Load);
this.m_Form.VisibleChanged -= new EventHandler(m_Form_VisibleChanged);
this.m_Form.Closing -= new CancelEventHandler(m_Form_Closing);
}

或者,您可以使用弱引用

这是一篇关于弱引用的非常、非常的好文章:

http://diditwith.net/PermaLink,guid,aacdb8ae-7baa-4423-a953-c18c1c7940ab.aspx

关于c# - GC会收集一个带有函数指针的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2337173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com