对象(类和方法)的生存期

本文关键字:生存期 方法 对象 | 更新日期: 2023-09-27 18:29:03

我只是想从下面的代码中得到建议。本质上,我想知道为什么我可以实例化一个对象,并将其分配给类中的变量newTask,然后能够在方法Button2Click中对相同的变量名newTask做同样的事情?

public partial class MainForm : Form
{
    TaskTypes.Task newTask = new TaskTypes.Task();
    void Button1Click(object sender, EventArgs e)
    {
        newTask.setName("Clean the toilet");
        textBox2.Text = newTask.getName();
    }
    void Button2Click(object sender, EventArgs e)
    {
        newTask = new TaskTypes.Task("Why isnt this part failing?");
        textBox2.Text = newTask.getName();
    } ...

对象(类和方法)的生存期

这里有两个概念:

  1. 变量的范围
  2. 内存引用

有了scope,一切都很清楚——类中声明的变量是类成员,可以从类中的任何位置访问。

现在,当您将一个变量分配给一个对象的新实例时,该变量将保留对它的引用。您可以根据需要多次分配新实例。旧实例将失去引用,因此,从技术上讲,它将不再是根实例,并且可以用于垃圾收集。存在只读变量(类成员)只能分配一次的情况。

其他答案:

我想我真的混淆了实例和对象-instance=object。在.net中,一切都是一种类型。所有类型都派生自类型"Object"。通常,任何堆内存存储的对象都称为引用类型或"对象"。堆叠称为值类型的存储基元。

1.对象是TaskType-是。TextBox也是对象,即控制

2.我创建了一个实例,并传递了字符串"clean the toiler"-yes。实例-您的代码加载到内存中。

3.变量为newTask-是

4.然后我为变量newTask分配了一个新实例-yes。

5.原来的实例"清洁厕所"是垃圾收集器收集的-不立即。当满足运行垃圾收集器的特定条件时。

这被称为范围,它定义了变量可见的位置。

您使用的是相同的声明变量,但在第一次单击按钮时使用类实例,然后在第二次单击按钮中使用新实例。

类中声明的变量对该类的所有成员都可用(具有作用域)。