对象的生命周期(类和方法)

时间:2013-08-27 02:14:08

标签: c#

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

3 个答案:

答案 0 :(得分:3)

这里有两个概念:

  1. 变量的范围
  2. 内存参考
  3. 对于范围,一切都很清楚 - 在类中声明的变量是一个类成员,可以从类中的任何位置访问。

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

    其他答案:

    我觉得我真的很混淆实例和对象 - instance = object。在.net中,一切都是Type。所有类型都派生自“对象”类型。通常,任何堆内存存储的对象称为引用类型或“对象”。堆栈存储的基元称为值类型。

    <强> 1。对象是TaskType - 是。 TextBox也是对象,即 - control

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

    第3。变量是newTask - 是

    <强> 4。然后我为变量newTask 分配了一个新实例 - 是的。

    <强> 5。最初的“清洁马桶”实例是由垃圾收集器收集的? - 不是立即收集的。当垃圾收集器运行时满足某些条件。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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