对象(类和方法)的生存期
本文关键字:生存期 方法 对象 | 更新日期: 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();
} ...
这里有两个概念:
- 变量的范围
- 内存引用
有了scope,一切都很清楚——类中声明的变量是类成员,可以从类中的任何位置访问。
现在,当您将一个变量分配给一个对象的新实例时,该变量将保留对它的引用。您可以根据需要多次分配新实例。旧实例将失去引用,因此,从技术上讲,它将不再是根实例,并且可以用于垃圾收集。存在只读变量(类成员)只能分配一次的情况。
其他答案:
我想我真的混淆了实例和对象-instance=object。在.net中,一切都是一种类型。所有类型都派生自类型"Object"。通常,任何堆内存存储的对象都称为引用类型或"对象"。堆叠称为值类型的存储基元。
1.对象是TaskType-是。TextBox也是对象,即控制
2.我创建了一个实例,并传递了字符串"clean the toiler"-yes。实例-您的代码加载到内存中。
3.变量为newTask-是
4.然后我为变量newTask分配了一个新实例-yes。
5.原来的实例"清洁厕所"是垃圾收集器收集的-不立即。当满足运行垃圾收集器的特定条件时。
这被称为范围,它定义了变量可见的位置。
您使用的是相同的声明变量,但在第一次单击按钮时使用类实例,然后在第二次单击按钮中使用新实例。
类中声明的变量对该类的所有成员都可用(具有作用域)。