2

我只是想获得以下代码的建议。本质上,我想知道为什么我可以实例化一个对象并将其分配给类中的变量 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();
    } ...
4

3 回答 3

4

这里有两个概念:

  1. 变量的范围
  2. 内存参考

有了作用域,一切都清楚了——在类中声明的变量是类成员,可以从类中的任何地方访问。

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

附加答案:

我想我真的对实例和对象感到困惑——实例=对象。在 .net 中,一切都是类型。所有类型都派生自“对象”类型。通常,任何堆内存存储的对象都称为引用类型或“对象”。堆栈存储的原语称为值类型。

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

2. 我创建了一个实例并传递了字符串“清洁厕所” ——是的。实例-您的代码加载到内存中。

3. 变量是 newTask - 是的

4. 然后我将一个新实例分配给变量 newTask - 是的。

5. 原始实例“打扫厕所”是被垃圾收集器收集的?- 不是马上。当满足垃圾收集器运行的某些条件时。

于 2013-08-27T02:30:11.303 回答
2

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

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

于 2013-08-27T02:15:56.230 回答
0

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

于 2013-08-27T02:17:09.937 回答