Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在哪里取消订阅活动?_C#_Events - Fatal编程技术网

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()
  • 使用弱事件模式
我知道这要视情况而定。在控件(wpf、winforms)的情况下,有些事件可以用来订阅/取消订阅,比如
加载的
/
卸载的
HandleCreated的
/
HandleDestroyed的
,等等。但是如果父对象是一个简单的
对象怎么办


还有一些更具体的例子:嵌套的ViewModels,其中每个级别都是一个
列表
,在任何级别都可以删除ViewModel,这是否意味着每个ViewModel都必须实现
IDisposable
(例如,如果这是正确的方法),它为列表中的每个项目调用
Dispose
?我试图使用弱事件,但那是。

@JamesThorpe,事件源寿命更长。也许只要申请。您(或我?)不希望内存泄漏(如果
SomeType
是大列表中的一项)。您的代码缺少详细信息--
someEvent1
属于哪个对象?大概不是
这个
(订阅你自己的活动是愚蠢的)。您是否订阅构造函数中作为参数传递的对象的事件(“父对象”)?@jeroenmoster,它是否太宽而无法涵盖任何场景?如果我说
someEvent1
是作为构造函数参数传递的实例事件,而
someEvent2
是静态事件,该怎么办。有什么不同呢?我正在寻找一个答案,它会选择最好的选项,并解释为什么其他人不那么好。这可能是最好的选项没有列出的地方。@Sinatr您能解释一下pt 1和pt 2之间的区别吗。对我来说,这听起来是一样的-viewmodel/订阅事件的人应该实现IDisposable。pt 3)如果您没有调用dispose,那么如果您注意到它,它将被静态代码分析捕获。对我来说,实现IDisposable将是正确的方法,而这些观点实际上并不是问题。