22lastUpdate : true
33---
44
5- # 类的定义和实例化
5+ # 实体模板
6+
7+ 在MCF中,大部分的操作都基于实体完成。使用频率最高的命令可能就是` execute as ` 命令了。在MCFPP中,引入了实体模板(Entity Template)的概念,用于集中管理某一类实体,并对这一类实体声明字段和方法,实现数据的储存和操作。在过去的设计中,实体模板又被称为类(Class)。
68
79``` mcfpp
8- class Person{
9- string name;
10- int age;
11- string sex;
12-
13- constructor(string name, int age){
14- this.name = name;
15- this.age = age;
16- }
10+ @Base<"creeper">
11+ class SuperCreeper{
1712
18- func setName(string name){
13+ text name;
14+
15+ constructor(text name){
1916 this.name = name;
2017 }
2118
22- func toString() -> string{
23- return "Name: " + this.name + ", Age: " + this.age;
19+ @Tick
20+ func tick(){
21+ effect(@a[distance=..5], Effects.Poison);
22+ title(@a[distance=..5], this.name);
2423 }
24+
2525}
2626```
2727
28- ## 类的定义
28+ ## 实体模板的定义
2929
30- 作为一个面向对象的编程语言,MCFPP有完善的面向对象的语法和功能。 它的语法和Java/C#的语法非常相似 ,所以,如果你有相关的基础的话,你应该可以很轻松地上手。
30+ 实体模板曾经称为类,因此在设计的时候, 它的语法和Java/C#中类的声明语法非常相似 ,所以,如果你有相关的基础的话,你应该可以很轻松地上手。
3131
32- 在MCFPP中,可以使用` class ` 关键字来声明一个类 :
32+ 在MCFPP中,可以使用` class ` 关键字来声明一个实体模板 :
3333
3434``` mcfpp
3535class ClassName{
36- #类体
37- #...
36+ # 类体
37+ # ...
3838}
3939```
4040
41- 其中,` ClassName ` 是类的名字 。在MCFPP中,类的名字必须以大写字母开头 。而紧随其后的花括号中的内容则是类体,包含了类的成员变量和成员函数,以及它的构造方法等等。是吧,和Java/C#是一样的 。
41+ 其中,` ClassName ` 是实体模板的名字 。在MCFPP中,实体模板的名字必须以大写字母开头 。而紧随其后的花括号中的内容则是类体,包含了实体模板的成员变量和成员方法,以及它的构造函数等等 。
4242
43- ## 类的实例化
43+ ## 实体模板的实例化
4444
45- 一般情况下,你可以使用` ClassName(参数列表) ` 来创建一个对象的实例 。比如本篇开头的示例` Person ` 类可以用 ` Person p = Person("Alumopper",16 )` 来创建。在MCFPP中,你并不需要 ` new ` 关键字。它被省略掉了 。
45+ 一般情况下,你可以使用` ClassName(参数列表) ` 来创建一个实体模板的实例 。比如本篇开头的示例` SuperCreeper ` 实体模板可以用 ` SuperCreeper p = SuperCreeper("Super Creeper" )` 来创建。
4646
47- ## 类的初始化器
47+ ## 实体模板的初始化器
4848
49- 在创建类的时候,你可以使用类初始化器来对类的某些成员变量初始化 ,例如对于上文中的` Person ` ,有:
49+ 在创建实体模板的时候,你可以使用实体模板初始化器来对实体模板的某些成员变量初始化 ,例如对于上文中的` SuperCreeper ` ,有:
5050
5151``` mcfpp
52- Person p = Person("Alumopper",16 )[
53- sex = "女 "
52+ SuperCreeper p = SuperCreeper("" )[
53+ name = "Super Creeper "
5454];
5555```
5656
57- 这样,` p ` 的` sex ` 成员变量就被初始化为` "女" ` 了。
58-
5957::: tip
6058
61- ### 不仅仅是类的初始化
59+ ### 不仅仅是实体模板的初始化
6260
63- 事实上,类初始化器可以用在任何地方,而不只是在类的初始化的时候 。比如
61+ 事实上,实体模板初始化器可以用在任何地方,而不只是在实体模板的初始化的时候 。比如
6462
6563``` mcfpp
6664func main(){
@@ -70,5 +68,12 @@ func main(){
7068}
7169```
7270
73- 在这个例子中,类的初始化器实际上是域操作器。` t = t[a = 100] ` 将t中的a赋值为100。
71+ 在这个例子中,实体模板的初始化器实际上是域操作器。` t = t[a = 100] ` 将t中的a赋值为100。
72+ :::
73+
74+ ::: tip
75+
76+ ### 实体模板与类
77+
78+ 类是实体模板的特殊形式。有时候,你可能只是想要储存一些数据,而不是对一类实体进行某些操作,在这个情况下,我们更倾向于把实体模板称为类。因此,在之后的文档中,如果你看到了“类”这个词,你可以认为它是“实体模板”的同义词。
7479:::
0 commit comments