C# 在哪里取消订阅活动?
例如,对于订阅构造函数中某些事件的常规类型:C# 在哪里取消订阅活动?,c#,events,C#,Events,例如,对于订阅构造函数中某些事件的常规类型: class SomeType { public SomeType(...) { someEvent1 += ... someEvent2 += ... } } 我在哪里取消订阅活动 终结器 IDisposable 某些方法不取消订阅Events() 使用弱事件模式 我知道这要视情况而定。在控件(wpf、winforms)的情况下,有些事件可以用来订阅/取消订阅,比如加载的/卸载的,Hand
class SomeType
{
public SomeType(...)
{
someEvent1 += ...
someEvent2 += ...
}
}
我在哪里取消订阅活动
- 终结器
IDisposable
- 某些方法
不取消订阅Events()
- 使用弱事件模式
加载的/卸载的,HandleCreated的/HandleDestroyed的,等等。但是如果父对象是一个简单的对象怎么办
还有一些更具体的例子:嵌套的ViewModels,其中每个级别都是一个列表
,在任何级别都可以删除ViewModel,这是否意味着每个ViewModel都必须实现IDisposable
(例如,如果这是正确的方法),它为列表中的每个项目调用Dispose
?我试图使用弱事件,但那是。@JamesThorpe,事件源寿命更长。也许只要申请。您(或我?)不希望内存泄漏(如果SomeType
是大列表中的一项)。您的代码缺少详细信息--someEvent1
属于哪个对象?大概不是这个
(订阅你自己的活动是愚蠢的)。您是否订阅构造函数中作为参数传递的对象的事件(“父对象”)?@jeroenmoster,它是否太宽而无法涵盖任何场景?如果我说someEvent1
是作为构造函数参数传递的实例事件,而someEvent2
是静态事件,该怎么办。有什么不同呢?我正在寻找一个答案,它会选择最好的选项,并解释为什么其他人不那么好。这可能是最好的选项没有列出的地方。@Sinatr您能解释一下pt 1和pt 2之间的区别吗。对我来说,这听起来是一样的-viewmodel/订阅事件的人应该实现IDisposable。pt 3)如果您没有调用dispose,那么如果您注意到它,它将被静态代码分析捕获。对我来说,实现IDisposable将是正确的方法,而这些观点实际上并不是问题。