C# GC将使用函数指针收集对象吗?
只是一个简单的问题。首先,让我验证我是否具有函数指针的正确含义。对于C#,函数指针基本上只是一个事件函数,对吗C# GC将使用函数指针收集对象吗?,c#,events,garbage-collection,C#,Events,Garbage Collection,只是一个简单的问题。首先,让我验证我是否具有函数指针的正确含义。对于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_Vis
第二,考虑下面的片段:
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是类型为的私有变量
//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=newtoastform();)并调用Show()时,Show方法应该是来自表单animator的方法。现在,当toastform关闭时,如何确保FormAnimator对象也被销毁。。如果有人能解释正在发生的一切,我将不胜感激。我的意思是。。toastform类和formanimator类都指向同一个对象吗?当我说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);
}
或者,您可以使用弱引用
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);
}
这是一篇关于弱引用的非常非常好的文章:
在
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);
}
或者,您可以使用弱引用
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);
}
这是一篇关于弱引用的非常非常好的文章:
+1周参考。保存了我现在键入的答案:-)。对不起,此dispose应该放在FormAnimator类或实际表单中?如果它在FormAnimator类中,是否有必要“dispose”或我可以将其放在FormAnimator的析构函数中?您的
toastform
应该处置此.m_Animator
,而且你的FormAnimator
应该有我发布的代码。每周参考+1。保存了我现在键入的答案:-)。对不起,此dispose应该放在FormAnimator类或实际表单中?如果它在FormAnimator类中,是否有必要“dispose”或我可以将其放在FormAnimator的析构函数中?您的toastform
应该处置此.m_Animator
,而且你的FormAnimator
应该有我发布的代码。