Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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#_Garbage Collection - Fatal编程技术网

C# 事件是否使对象保持活动状态?

C# 事件是否使对象保持活动状态?,c#,garbage-collection,C#,Garbage Collection,假设我有这个系统: public class AppController { public event Action LanguageChangedEvent; } public class UIElement { private AppController _appController = (some initialization); public UIElement() { _appController.LanguageChangedEvent

假设我有这个系统:

public class AppController {
    public event Action LanguageChangedEvent;
}

public class UIElement {

    private AppController _appController = (some initialization);

    public UIElement() {
        _appController.LanguageChangedEvent += OnLanguageChanged;
    }

    public void OnLanguageChanged() {
        // Do something
    }
}
由于事件保持活动状态,并且它具有对UIElement类中方法的引用,因此它具有对UIElement对象的引用


该引用是否使对象保持活动状态?

因为
OnLanguageChanged
是一个实例方法,
\u appController
保存对构造的
UIElement
实例的引用


\u appController
处于活动状态时,
UIElement
实例也处于活动状态。

什么是
OnLanguageChanged
?它是在
UIElement
类中声明的吗?@Dennis:我猜在这种情况下是
UIElement
的一个实例方法。@Dennis确实是
UIElement
的一个实例方法,你的“应用”控制器非常危险。在适当的地方使用static关键字,它就在这里。它标记全局变量。这有助于你“啊哦”,静态事件是一个巨大的危险信号。@HansPassant应用程序控制器控制着我的应用程序中的数据流。它使用事件来处理导航,这样我就可以将核心重新用于其他程序(我使用的是Xamarin)。使用事件可以很容易地在一个地方执行所有必要的导航和应用程序逻辑。appcontroller是一个单例,我在这里省略了它,因为这个问题不需要它。