this
写一个类 Tin,带 int 字段 size 和构造函数 Tin(int size),其中执行 this.size = size;。在 Pine 里保留 Main,用 Tin t = new Tin(7); 建出一个 tin,再写出 t.size。两种类型放在同一教学文件里,这样 dotnet run 仍然简单。用 dotnet run 运行。屏幕应显示一行:7。参数与字段共用名称 size。单词 this 命名对象上的字段,使存储落到正确位置。名称冲突时使用 this,就是本页要教的内容。请把启动用的公共类名保持为 Pine。
为什么同名需要 this
在构造函数页,参数是 n,字段是 size,因此 size = n; 很清楚。这里两个名称都是 size。在构造函数内部,裸写的 size 表示参数。写 size = size; 会把参数复制到自身,并把字段留在默认值。对象上的字段仍需要一次写入。那次写入在左侧使用 this.size。
打开 Pine 文件。启动类名保持 Pine。本页不重命名启动类。若 Main 里仍全是残留的 Box b = new Box(4); 这种构造函数调用,删掉它。删掉任何残留的 Box 类。删掉任何 ReadLine 行。你保留的文件不等待键入。
在 Pine 的花括号之外——仍在同一文件里——写下 public class Tin。在花括号里声明 int size;。然后写构造函数:Tin(int size) { this.size = size; }。本页的 Tin 里没有 Main。运行前先保存文件。
再读一遍赋值。右侧的 size 是进入参数的值——这里是 7。左侧的 this.size 是正在构建的对象上的字段。该行运行后,该对象的 size 持有 7。若去掉 this. 并保留 size = size;,屏幕稍后会显示 0,因为字段从未改变。
using System;
public class Tin
{
int size;
Tin(int size)
{
this.size = size;
}
}
Pine 建出一个 tin
Pine 保留 public static void Main()。在 Main 里写 Tin t = new Tin(7);,再写 Console.WriteLine(t.size);。参数 7 成为构造函数参数 size。构造函数用 this.size = size; 存储它。本页不需要单独的 t.size = 7; 行。本页不写 Box b = new Box(4);。那是构造函数一课。
using System;
public class Pine
{
public static void Main()
{
Tin t = new Tin(7);
Console.WriteLine(t.size);
}
}
public class Tin
{
int size;
Tin(int size)
{
this.size = size;
}
}
从顶部读保留的文件。using System; 准备短名称。public class Pine 是启动类。public static void Main() 是运行时开始的地方。表达式 new Tin(7) 建出一个 Tin,并以参数等于 7 调用 Tin(int size)。体写出 this.size = size,于是对象的字段变为 7。然后 Main 写出 t.size,屏幕显示 7。
用 dotnet run 运行。程序写出一行后停止。它不等你键入。若 dotnet run 在等待,文件里仍有 ReadLine。删掉那一行,在 Pine 里保留 new Tin(7) 加上写出,并在 Tin 里保留 this.size = size;。屏幕显示 7。若屏幕显示 4,残留的 new Box(4) 路径仍在运行。若屏幕显示 0,构造函数体大概是没有 this. 的 size = size;——把 this. 放回左侧。
若在构造函数名前加 void,它会变成普通方法而不是构造函数,new Tin(7) 也不会按本页期望的方式运行该体。标头必须像 Tin(int size),不是 void Tin(int size)。
this.size 与 size 并排
一张短表在你身处构造函数内时,把两个名称分清。
📊 this.size vs size
| Name | What it means in Tin(int size) |
|---|---|
size alone |
the parameter that entered the constructor |
this.size |
the field on the object being built |
this.size = size; |
store the parameter into the field |
size = size; |
does not update the field |
表只是提醒。你保留的键入行是构造函数里的 this.size = size;,然后在 Pine 里是 Tin t = new Tin(7); 和 Console.WriteLine(t.size);。 |
与构造函数页对比
在构造函数页,Box(int n) { size = n; } 能工作,因为 n 与 size 是不同的词。那种形状仍然有效。本页故意把同一个词用两次,这样你就需要 this。带 size = n; 的残留 Box 演示是另一课。为本页请保留 Tin 与 Pine 以及 this.size = size;。
只写 Console.WriteLine(t); 不会显示干净的 7。要看已存的数字,请写 Console.WriteLine(t.size);。对象引用本身不是字段值。
在其他日子,你仍可选择不同的参数名。本课故意选择匹配的名称。不要在本页的同一个 Tin 演示里混用 n 与 this。一条清楚的路径就够:匹配的名称、字段上的 this、写出字段。
两个 tin 仍然彼此独立
每次 new Tin(...) 都会为另一个对象再次运行构造函数。你可以写 Tin a = new Tin(2); 和 Tin b = new Tin(9);,再写出两个 size 字段。每次调用都在自己的对象上执行 this.size = size;。两个对象不共享同一个 size 槽位。那次检查不需要第二段代码框——你已经看到 7 之后,可在 Pine 里改数字,或把单 tin 演示保留为要保存的文件。
若两行都显示 0,构造函数左侧仍缺少 this。若生成在编译 Pine 时找不到 Tin,请检查 public class Tin 是否在同一文件里。
本页为实例方法留下什么
本页只在构造函数内使用 this 来存储字段。下一页——实例方法——展示在对象上运行、并能读取或更改字段的方法。这里请留在构造函数存储。不要为本课在 Tin 上发明额外方法,除非你已经会;本课目标是名称匹配时的 this.size = size。
不要把 Tin 嵌进 Pine 的花括号里。本页两个类在文件里以兄弟关系并排。若 Pine 仍有构造函数演示留下的 Box b = new Box(4);,而本文件没有你打算保留的匹配 Box 类,删掉那一行。保留 Tin t = new Tin(7); 和 Console.WriteLine(t.size);。在教 Tin 时,生成不会替你发明 Box。
你可以声明 int size;,写 Tin(int size) { this.size = size; },并从 Pine.Main 用 Tin t = new Tin(7); 构建。用 dotnet run 运行。屏幕显示 7。当参数使用相同名称时,单词 this 命名对象的字段。你在构建时传入数字,构造函数用 this 存储,写出证明了存储。当裸名称会表示参数时,把 this 想成指向正在构建的对象的指针。Pine 仍是你用 dotnet run 打开的门。下一页是实例方法,对象已存在之后,对象上的方法使用字段。
保持构造函数标头不含 void。在字段上保留 this.。在 t.size 上保留写出。这三项习惯是本页继续前进前的检查点。
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部