对象
写一个名为 Chip 的类,带方法 beep,写出 ok。本页上该方法不是 static。在 Pine 里保留 Main,用 Chip c = new Chip(); 建出一个 chip,再调用 c.beep();。两种类型放在同一教学文件里,这样 dotnet run 仍然简单。用 dotnet run 运行。屏幕应显示一行:ok。单词 new 从类建出一个对象。变量 c 持有该对象。你在 c 上调用 beep,而不是在裸类名上调用。这一个建出的对象——以及使用它的调用——就是本页要教的内容。请把启动用的公共类名保持为 Pine。
从类得到一个对象
类仍然是命名类型。对象是从该类型建出的一个值。行 new Chip() 请 C# 建出那个值。你把它存进类型为 Chip 的变量,再用该变量去到达属于每个对象的方法。
打开 Pine 文件。启动类名保持 Pine。本页不重命名启动类。若 Main 里仍全是残留的 Badge.show(); 这种 static 调用,删掉它。删掉任何残留的 down 递归。删掉任何 ReadLine 行。你保留的文件不等待键入。
在 Pine 的花括号之外——仍在同一文件里——写下 public class Chip。在 Chip 里写下 void beep()——这个头上没有 static 一词。方法体是一行写出:Console.WriteLine("ok");。保持 void。方法不返回数字。本页的 Chip 里没有 Main。运行前先保存文件。
第一个代码框只显示 Chip,方便你干净地读类型。后面的代码框是保留形状:Pine 建出一个 chip,再两个。
using System;
public class Chip
{
void beep()
{
Console.WriteLine("ok");
}
}
Pine 建出 chip,再调用 beep
Pine 保留 public static void Main()。在 Main 里写两行:先 Chip c = new Chip();,再 c.beep();。第一行声明类型为 Chip 的变量 c,并用新对象填满它。第二行在该对象上调用 beep。点号跟在变量名后面,而不是单独跟在类名后面。本页不写 Badge.show();。那是类一课里的 static 调用。
using System;
public class Pine
{
public static void Main()
{
Chip c = new Chip();
c.beep();
}
}
public class Chip
{
void beep()
{
Console.WriteLine("ok");
}
}
从顶部读保留的文件。using System; 准备短名称。public class Pine 是启动类。public static void Main() 是运行时开始的地方。表达式 new Chip() 建出一个对象。该对象存进 c。调用 c.beep() 进入该对象的 beep。方法写出 ok 并返回。然后 Pine 结束。屏幕上的词来自对象的方法——在 new 创建对象之后。
用 dotnet run 运行。程序写出一行后停止。它不等你键入。若 dotnet run 在等待,文件里仍有 ReadLine。删掉那一行,在 Pine 里保留 Chip c = new Chip(); 加上 c.beep();,并把 beep 留在 Chip 里。屏幕显示 ok。若屏幕显示 ready,残留的 Badge.show(); 调用仍在运行。若屏幕显示字母 Chip,写出行带了引号:Console.WriteLine("Chip");。屏幕行不对时,不要重装 .NET SDK。
再按顺序走一遍运行。C# 从 Pine.Main 开始。第一条语句用 new Chip() 建出一个对象并存进 c。第二条语句调用 c.beep()。在 beep 里,WriteLine 写出 ok。然后 beep 结束,Main 里没有剩余工作,程序结束。本页你没有把 Console.WriteLine("ok"); 放进 Pine。你放在 Chip 下,并通过对象变量去请求它。
把类想成文件里的蓝图,把对象想成这次运行在内存里建出的一块零件。每次 new Chip() 再建一块。变量给这块零件起名,好让后面的行能碰到它。没有这个名字,建出的零件在本页就没有给 beep 用的把手。
为什么调用走 c,而不是单独的 Chip
在类那一页,可以用 Badge.show() 按类型名调用 static 方法。这里 beep 没有 static 一词。C# 先要一个对象。没有对象就写 Chip.beep();,不符合本页的初学者形状。用 new 建出,把结果留在变量里,再通过该变量调用。
若只写 new Chip(); 却从不保存,你仍然建出了对象,但没有留下名字去调用 beep。本页请保留变量:Chip c = new Chip(); 再 c.beep();。变量是 new 结束后到达对象的方式。
残留的 static 演示会搅乱 Main。仍在调用 Badge.show(); 的文件是上一课的形状。为本页请保留 Chip 与 Pine 以及 new 那一行。这里不需要 Badge。
两个对象,两次 beep
你可以从同一个类建出不止一个对象。每次 new Chip() 做出单独的对象。每个对象可以自己运行 beep。类的文本是共享的;对象不是同一个值。
using System;
public class Pine
{
public static void Main()
{
Chip a = new Chip();
Chip b = new Chip();
a.beep();
b.beep();
}
}
public class Chip
{
void beep()
{
Console.WriteLine("ok");
}
}
再用 dotnet run 运行。屏幕应显示两行:ok,然后 ok。第一行来自 a。第二行来自 b。两次都用了 Chip 里同一段 beep 方法文本,但每次调用跑在用 new 建出的不同对象上。
若屏幕只显示一个 ok,检查两个调用是否都在,以及两个变量是否都用 new 建出。写 Chip b = a; 不会建出第二个对象;它只让 b 指向与 a 相同的对象。那个想法留给更后面的页。本页若要两个对象,就写两个 new Chip() 表达式。
若喜欢,可以把变量从 c 改名为 unit:Chip unit = new Chip(); 再 unit.beep();。只要方法体仍写出那个词,屏幕就仍是 ok。变量名归你;类型名 Chip 与 new Chip() 表达式仍须一致。
本页把什么留给字段
本页还不在 chip 里存数字或词。字段——在每个对象上持有数据的名字——是下一页。这里对象在 new 之后存在,实例方法 beep 只写出。这已足够看清拆分:类作为类型,一个对象作为建出的值。
不要把 Chip 嵌进 Pine 的花括号里。本页上两个类在文件里是并列的。Chip 的方法坐在 Chip 里。Main 坐在 Pine 里。可以把 beep 里写出的词改成 ping 再运行。屏幕应跟随你放进 Chip 的字符串。Pine 的 new 与调用形状保持不变。
若编译 Pine 时找不到 Chip,检查 public class Chip 是否在同一文件,且类那一行确实写的是 Chip。若运行什么都不写,确认 Main 仍在 new 行之后调用 c.beep();,且 beep 里仍有 WriteLine。
你可以写带 void beep() 的 Chip,用 Chip c = new Chip(); 建出一个对象,再从 Pine.Main 调用 c.beep();。用 dotnet run 运行。屏幕显示 ok。第二次 new Chip() 再建出另一个可以自己 beep 的对象。把 Chip 想成蓝图,把每次 new Chip() 想成你可命名的一块建出零件。Pine 仍是你用 dotnet run 打开的门。下一页是字段:那里每个对象开始持有自己的存储数据。
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部