有人可以向我解释类中数据的生命周期吗?

本文关键字:生命 周期 数据 可以向 解释 | 更新日期: 2023-09-27 18:33:14

例如观察者模式。 在本教程中,类(观察者(将自己的类(观察者(注册到类(观察者(,然后观察者类将观察者保存到列表中。 我的问题是观察者类何时重置其值。

例如。

Class1.cs 有这样的代码,

//declares a property
public List<string> list;
//and then initialize it on a constructor
public class1()
{
 list = new list<string>();
}

然后只初始化了 class1。

因此,class1 中的数据只有在应用程序关闭或重新启动写入时才会重置?

所以这是另一个问题。如果类 1 初始化的次数多于 1 会怎样?

class1 instance1 = new class1();
instance1.list.add("one");
class2 instance2 = new class1();

有人可以向我解释类中数据的生命周期吗?

我认为

您对观察者和可观察量感到困惑。

IMO,由于事件存在于 C# 中,因此无需使用观察器和可观察量。但如果你真的想使用它们,那很好。

可观察量是将在某个时候引发事件的类。观察者侦听处理事件的东西。

让我们通过一个例子来更清楚地说明这一点。 Button是可观察的。每当单击按钮时,类都可以引发Clicked事件。现在您想知道何时单击按钮。因此,您可以使用事件处理程序方法订阅Button的单击事件。

您问的是可观察对象何时丢失或重置观察者列表。我的回答是:可以随时这样做

如您所知,可观察量将观察者列表保留为私有字段。因此,在可观察量内部,代码可以访问该字段。因此,如果可观察类中的方法或某些内容调用:

observers.Clear();

然后列表重置!

但是,如果没有调用 Clear 方法怎么办?观察员什么时候会离开?

因为观察者列表是一个字段,所以当应用完成运行时,或者某个析构函数销毁实例,或者它被垃圾回收时,它将被丢弃......

很简单!但是,您为什么首先要关注这一点?

编辑:

因此,class1 中的数据只有在应用程序关闭或重新启动写入时才会重置?

是的!如果实例将被垃圾回收,数据也将重置。

如果类 1 初始化了多个 1 会怎样

要回答这个问题,您需要知道实例之间的区别。类就像实例的蓝图。实例化类时,将创建一个新实例。所以在你的代码中,有 2 个 class1 实例:instance1instance2 。它们是完全独立的,这意味着instance2list不包含"one" 。而当instance1被垃圾回收时,你只会丢失instance1的数据,而不是instance2。但是当应用程序退出时,所有实例都会被收集,因此数据就消失了。*

*注意:实际上,当应用程序关闭时,实例可能仍在内存中。我说数据消失了,因为它们无法访问。