有人可以向我解释类中数据的生命周期吗?
本文关键字:生命 周期 数据 可以向 解释 | 更新日期: 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
实例:instance1
和 instance2
。它们是完全独立的,这意味着instance2
的list
不包含"one"
。而当instance1
被垃圾回收时,你只会丢失instance1
的数据,而不是instance2
。但是当应用程序退出时,所有实例都会被收集,因此数据就消失了。*
*注意:实际上,当应用程序关闭时,实例可能仍在内存中。我说数据消失了,因为它们无法访问。