正在加载...

实例方法

写一个类 Jar,带 int 字段 fill、构造函数 Jar(int n)(其中 fill = n;),以及实例方法 void bump()(其中执行 fill = fill + 1;)。在 Pine 里保留 Main,用 Jar j = new Jar(3); 建出一个 jar,调用 j.bump();,再写出 j.fill。两种类型放在同一教学文件里,这样 dotnet run 仍然简单。用 dotnet run 运行。屏幕应显示一行:4。方法在那一个对象上运行并改变其字段。通过对象变量调用方法,就是本页要教的内容。请把启动用的公共类名保持为 Pine。

属于对象的方法

在更早的方法页里,你从 Main 调用一个名称,前面没有对象。这里方法坐在类上,但你通过 jar 变量到达它:j.bump()。那次调用使用 j 所命名的那个 jar 的字段。第二个 jar 会保留自己的 fill。
打开 Pine 文件。启动类名保持 Pine。本页不重命名启动类。若 Main 里仍全是 this 页残留的 Tin t = new Tin(7); 调用,删掉它。删掉任何残留的 Tin 类。删掉任何 ReadLine 行。你保留的文件不等待键入。
在 Pine 的花括号之外——仍在同一文件里——写下 public class Jar。在花括号里声明 int fill;。写构造函数 Jar(int n) { fill = n; },用不同名称,使本页不需要 this。然后写实例方法:void bump() { fill = fill + 1; }。本页的 Jar 里没有 Main。运行前先保存文件。
方法标头需要 void,因为 bump 不返回要写出的值。构造函数仍然没有 void——把这个区别保持清楚。

Jar with bump method

csharp
using System;

public class Jar
{
    int fill;

    Jar(int n)
    {
        fill = n;
    }

    void bump()
    {
        fill = fill + 1;
    }
}

Pine 建出 jar 并调用 bump

Pine 保留 public static void Main()。在 Main 里按顺序写三行:Jar j = new Jar(3);,然后 j.bump();,然后 Console.WriteLine(j.fill);。构造函数存储 3。调用 j.bump() 加一。写出显示新值。本页不写 Tin t = new Tin(7);。那是 this 一课。

Pine one bump

csharp
using System;

public class Pine
{
    public static void Main()
    {
        Jar j = new Jar(3);
        j.bump();
        Console.WriteLine(j.fill);
    }
}

public class Jar
{
    int fill;

    Jar(int n)
    {
        fill = n;
    }

    void bump()
    {
        fill = fill + 1;
    }
}

从顶部读保留的文件。using System; 准备短名称。public class Pine 是启动类。public static void Main() 是运行时开始的地方。表达式 new Jar(3) 建出一个 jar,并把 3 存进 fill。调用 j.bump() 进入同一对象上的 bump。体写出 fill = fill + 1,于是 fill 变为 4。然后 Main 写出 j.fill,屏幕显示 4。
用 dotnet run 运行。程序写出一行后停止。它不等你键入。若 dotnet run 在等待,文件里仍有 ReadLine。删掉那一行,在 Pine 里保留 new Jar(3)、j.bump() 和写出,并在 Jar 里保留 bump。屏幕显示 4。若屏幕显示 7,残留的 Tin 演示仍在运行。若屏幕显示 3,bump 调用可能缺失,或发生在写出之后。
若前面没有 j. 就写 bump();,在这种 Main 形状下构建会拒绝。实例方法需要一个对象。若写成 Jar.bump(); 当作静态调用,那是下一课的想法——不是本页。请保留 j.bump();。

与 this 以及普通字段赋值对照

在 this 页,你在构造函数里用匹配名称存储字段。那仍然有效。本页增加一个方法,可在对象已经存在之后再调用。残留的 Tin t = new Tin(7); 带 this.size = size; 是另一课。对本页请保留 Jar 与 Pine 以及 j.bump();。
你仍可在 Main 里写 j.fill = j.fill + 1;。本课把那次改动移进 bump,让对象携带动作。只写 Console.WriteLine(j); 不会显示干净的 4。写 Console.WriteLine(j.fill); 才能看到存储的数字。

同一个 jar 上两次 bump

你可以在写出之前调用两次 j.bump();。从 new Jar(3) 开始,bump 一次到 4,再 bump 一次到 5,然后写出。该检查适合放进一个小的第二段 Pine 演示。

Pine two bumps

csharp
using System;

public class Pine
{
    public static void Main()
    {
        Jar j = new Jar(3);
        j.bump();
        j.bump();
        Console.WriteLine(j.fill);
    }
}

public class Jar
{
    int fill;

    Jar(int n)
    {
        fill = n;
    }

    void bump()
    {
        fill = fill + 1;
    }
}

再次用 dotnet run 运行。屏幕应显示 5。每次对 bump 的调用都在同一对象上运行,并再加一。写 Jar k = j; 不会建出第二个对象——需要两个分开的 fill 时,使用两次 new Jar(...) 调用。对本页,同一个 jar 上两次 bump 就足以看到方法运行两次。
若屏幕仍显示 3,bump 调用可能缺失,或 Main 仍在调用它们之前就写出。若显示 7 或其他残留数字,文件里可能仍有旧的 Tin 演示。请保留 new Jar(3) 和 bump 调用。

本页为 static 留下什么

本页通过对象调用方法:j.bump()。更后面的一页——static——展示属于类名本身、前面不需要对象的方法和字段。这里请留在实例调用。除非你已经知道,否则不要在本页发明 static void bump();本课目标是对象上的调用。
不要把 Jar 嵌进 Pine 的花括号里。本页两个类在文件里作为同级兄弟。若构建在编译 Pine 时找不到 Jar,检查 public class Jar 是否在同一文件。若屏幕显示 0,构造函数可能缺少存储,或 bump 从未运行——请保留 Jar(int n) { fill = n; },并在写出前保留 j.bump();。

你可以声明 int fill;,写 Jar(int n) { fill = n; } 和 void bump() { fill = fill + 1; },并从 Pine.Main 运行 Jar j = new Jar(3);、j.bump();,再写出 j.fill。用 dotnet run 运行。屏幕显示 4。实例方法在该对象上运行并改变了它的字段。把 bump 想成 jar 存在之后能做的一个动作。Pine 仍是你用 dotnet run 打开的那扇门。下一页是 static,那里有些成员属于类名,前面不需要对象变量。
把 void 留在方法上,不要放在构造函数上。调用前保留对象:j.bump();。写出保留在 j.fill。这三项习惯是本页继续前进前的检查点。

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
5
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部