🎨 style(markdown): format markdown files

This commit is contained in:
csh
2026-01-11 12:58:27 +08:00
parent e3ecd26a88
commit 2b37860331
54 changed files with 10042 additions and 16272 deletions
+67 -57
View File
@@ -313,6 +313,7 @@ TSL 继承的实现方式是:声明类类型时,在 `class` 后的括号中
```tsl
type MyClass = class(BaseClass1[, BaseClass2, ...]);
```
以上代码定义了一个叫做 myClass 的类,它继承自 BaseClass1、BaseClass2 列表。这样我们称 MyClass 为子类,BaseClass1BaseClass2…为 MyClass 的基类或父类。也可以叫祖先类.
子类 MyClass 将获得基类(BaseClass1、BaseClass2、…)的所有非私有数据和行为,此外新类可以为自己定义新的数据和行为进行扩展,也可以重新定义基类中的行为.
@@ -339,6 +340,7 @@ begin
obj.F1();
end;
```
说明:类 `B` 继承了类 `A` 的方法 `F1`,不需要重复定义。
如果子类的多个基类都有同样的方法,在子类中调用这个方法时需要为这个方法指定具体的父类,方法为在调用的方法前面加上 Class(基类名称).
@@ -429,7 +431,7 @@ TSL 成员(包括字段、方法、属性)默认的作用域是 public。
```tsl
type
MyClass :=
MyClass :=
class
(BaseClass)
private
@@ -570,12 +572,14 @@ end;
```tsl
class(Thuman).mCount; // 不用实例化来进行调用
```
```tsl
obj := new Thuman(); // 用实例化来进行调用
obj.mCount;
```
#### const 常量成员
常量成员定义的值可以是一个常数也可以是常量参与的计算。具体定义与支持的运算符可参考常量及常量成员的定义与初始化
@@ -818,7 +822,7 @@ function Method1(s, a, b); override;
begin
Inherited; // 优先调用父类中Method1(s,a,b)方法,找不到不报错
s := s + "->SubClass";
s2 :=
s2 :=
Inherited Method2(a, b); // 指定调用父类中的Method2(a,b)方法,找不到会报错
s := s + "->" + s2;
return s;
@@ -976,7 +980,7 @@ begin
end;
end;
type Ellipse = class(Figure)
function Draw(); //
function Draw(); //
// 注意没有override
begin
Writeln("draw Ellipse");
@@ -1061,6 +1065,7 @@ end.
```tsl
function Create()
```
TSL 总是为一个类生成默认的公有(public)的 create 方法, 如果显式没有为类声明 public
create,对象初始化时就使用默认的 create 方法,如果用户声明了 public
create 方法,对象初始化时就执行用户定义的方法。Create 不可以声明为私有(private)的和受保护(protected)的方法,否则对象初始化时不执行自己声明的方法.
@@ -1104,6 +1109,7 @@ end.
```tsl
// 调用 class(BaseClass).Create();
```
#### 析构函数
对象销毁时候执行的方法。声明一个析构函数就像声明一个一般的函数,必须以关键字 Destroy 命名的函数,且无参数,当对象释放时会自动调用。
@@ -1111,6 +1117,7 @@ end.
```tsl
function destroy();
```
#### 指定类
如果要指定执行某个类中的方法,需要用 Class 指定类名。
@@ -1121,11 +1128,13 @@ function destroy();
class(ClassName).FunctionName;
// 表示执行类 ClassName 中的方法 FunctionName;
```
如果是对实例对象,希望实例对象执行某个祖先类的方法,格式为:
```tsl
class(ClassName, ObjectName).FunctionName;
```
表示实例对象 ObjectName 执行祖先类 ClassName 的 FunctionName 方法。
#### Self
@@ -1145,6 +1154,7 @@ class(ClassName, ObjectName).FunctionName;
```tsl
self.functionName();
```
编译器会自动匹配所调用的方法,Self 方法一般可以省略。
有一点注意的是:
@@ -1187,6 +1197,7 @@ AA.F(); // 输出 A.F2;
// 创建了类型 A 的实例对象,F()中的 Self.F2(),表示调用的是类型 A 的 F2();
BB := CreateObject("B");
```
BB.F();//输出 B.F2()
以上代码创建了类型 B 的实例对象,F()中的 Self.F2()表示调用类型 B 的 F2()
@@ -1196,6 +1207,7 @@ Self 的这种特性在某些情况下会出现理解上的歧义,如果想固
```tsl
// 以上代码中的 Self.F2()需要换成 class(A).F2();
```
那么以上代码输出
A.F2
@@ -1270,6 +1282,7 @@ end;
```tsl
class(类名).类方法
```
示例:
上例中,可以
@@ -1277,6 +1290,7 @@ class(类名).类方法
```tsl
class(ClassName).FuncName();
```
注:
一个类方法也可以被当作实例方法使用,使用方法和实例方法完全一样。方法的内部也可以调用实例的字段、属性和方法,如果方法调用了这样的数据或方法,就不能当作类方法使用了,否则的话会出错。
@@ -1306,6 +1320,7 @@ property Components: DocxComponentsFacade read components_;
```tsl
2、PropertyName 是自定义合法的属性名,可以带参数,写法如 PropertyName(a, b);
```
3、每个属性至少有一个读限定符或一个写限定符,或两者都有,它们称为访问限定符,具有以下的格式:
read fieldOrMethod
@@ -1463,6 +1478,7 @@ property idx0 index"High school"read rindex write windex;
```tsl
class(类名)或者 FindClass(类名字符串)可以获得一个类的类型。
```
CreateObject 支持通过指定类的类型创建实例。
如:
@@ -1472,13 +1488,13 @@ obj1 := new T1();
Echo obj1
is class(T1)
; // 判断对象是否是指定类的实例
C1 :=
C1 :=
findclass("t1")
; // 获取指定类的类型
Echo obj1
is C1
;
obj2 :=
obj2 :=
CreateObject(C1)
; // 通过指定类的类型创建实例
```
@@ -1494,6 +1510,7 @@ CreateObject(C1)
```tsl
classA := FindClass("A");
```
classA 指向了类 A,可以通过 ClassA 调用 A 的共享方法。但是不能调用实例方法,因为 ClassA 没有指向实例对象。
```tsl
@@ -1714,7 +1731,6 @@ funcC := findfunction("add", class(TestClass01));
return TSLObjects(0);
```
范例 02:获取当前运行环境下所有对象信息以及原对象,并通过该结果访问其属性、方法
```tsl
@@ -1731,7 +1747,6 @@ t2 := newObjB.add(3, 4);
return array(v1, v2, t1, t2);
```
#### FindFunction
在对象或类中查找方法:
@@ -1772,11 +1787,13 @@ begin
F2.do();
end.
```
#### ThisFunction
```tsl
F := ThisFunction(Object or class.function);
```
查找方法的又一个方法;参数格式为:
1. 对象名.方法名,如果创建了对象,可用这种方法。
@@ -1805,6 +1822,7 @@ begin
F2.do();
end.
```
#### FunctionInfo
调用方法:
@@ -1813,25 +1831,25 @@ end.
获取函数的信息。返回存放函数信息的字符串下标数组。
| 下标 | 数据类型 | 描述 |
| --- | --- | --- |
| functionname | String | 方法名 |
| parameter | Array | 方法参数 |
| returntype | Stirng | 函数返回值 |
| returndim | Integer | 数组的维度,0表示不是数组 |
| calltype | Integer | 调用类型 |
| classname | Stirng | 所在的类名 |
| 下标 | 数据类型 | 描述 |
| ------------ | -------- | ------------------------ |
| functionname | String | 方法名 |
| parameter | Array | 方法参数 |
| returntype | Stirng | 函数返回值 |
| returndim | Integer | 数组的维度,0表示不是数组 |
| calltype | Integer | 调用类型 |
| classname | Stirng | 所在的类名 |
其中:parameter 下标所对应的数组也是字符串下标数组。
下标
| 下标 | 数据类型 | 描述 |
| --- | --- | --- |
| nme | String | 参数名称 |
| tpe | String | 参数类型 |
| dm | Integer | 数组的维度 |
| out | Integer | |
| 下标 | 数据类型 | 描述 |
| ---- | -------- | ---------- |
| nme | String | 参数名称 |
| tpe | String | 参数类型 |
| dm | Integer | 数组的维度 |
| out | Integer | |
注意:
@@ -2045,8 +2063,8 @@ begin
FMoneyMX := array();
FMoneyMX[0]["时间"] := datetimetostr(now()); // 初始资产
FMoneyMX[0]["当前余额"] := v; // 初始资产
FMoneyMX[0]["出金"] := 0; //
FMoneyMX[0]["入金"] := 0; //
FMoneyMX[0]["出金"] := 0; //
FMoneyMX[0]["入金"] := 0; //
FlastR := -1;
FnewR := 0;
end;
@@ -2215,6 +2233,7 @@ array(2,3,4,1000,6)
```tsl
c := b++;后:
```
c.data:
array(2,3,4,1000,6)
@@ -2230,6 +2249,7 @@ array(3,4,5,1001,7)
```tsl
// 在单元中的类,可通过 obj:=new Unit1.Class1.Class2()的方式进行构建
```
通过 Type ClassA=Class(Unit1.Class1.Class2...)模式进行继承
#### 继承单元中的类
@@ -2247,6 +2267,7 @@ ClassA=Class(Unit1.Class1.Class2...)模式来定义类,Class 中包含“单
type ClassA = class(Unit1.Class1.Class2, OtherClass)
end;
```
例如:`type ClassA = class(Unit1.Class1.Class2)` 表示 ClassA 直接继承单元 Unit1 中 Class1 内部定义的嵌套类 Class2。
书写时需注意,必须完整、准确的指定从单元名到最终类名的全部路径,否则会执行失败。
@@ -3080,28 +3101,28 @@ return array(
TCipher 类用于多重对称加密算法,其支持的算法有:
| mode | 算法名 | 密钥长度(字节) | IV长度(字节) |
| --- | --- | --- | --- |
| 1 | DES_ECB | 8 | 0 |
| 2 | DEC_CBC | 8 | 8 |
| 3 | DES_CFB | 8 | 8 |
| 4 | DES_OFB | 8 | 8 |
| 5 | IDEA_ECB | 16 | 0 |
| 6 | IDEA_CBC | 16 | 8 |
| 7 | IDEA_CFB | 16 | 8 |
| 8 | IDEA_OFB | 16 | 8 |
| 9 | AES_128_ECB | 16 | 0 |
| 10 | AES_128_CBC | 16 | 16 |
| 11 | AES_128_CFB | 16 | 16 |
| 12 | AES_128_OFB | 16 | 16 |
| 13 | AES_192_ECB | 24 | 0 |
| 14 | AES_192_CBC | 24 | 16 |
| 15 | AES_192_CFB | 24 | 16 |
| 16 | AES_192_OFB | 24 | 16 |
| 17 | AES_256_ECB | 32 | 0 |
| 18 | AES_256_CBC | 32 | 16 |
| 19 | AES_256_CFB | 32 | 16 |
| 20 | AES_256_OFB | 32 | 16 |
| mode | 算法名 | 密钥长度(字节) | IV长度(字节) |
| ---- | ----------- | ---------------- | -------------- |
| 1 | DES_ECB | 8 | 0 |
| 2 | DEC_CBC | 8 | 8 |
| 3 | DES_CFB | 8 | 8 |
| 4 | DES_OFB | 8 | 8 |
| 5 | IDEA_ECB | 16 | 0 |
| 6 | IDEA_CBC | 16 | 8 |
| 7 | IDEA_CFB | 16 | 8 |
| 8 | IDEA_OFB | 16 | 8 |
| 9 | AES_128_ECB | 16 | 0 |
| 10 | AES_128_CBC | 16 | 16 |
| 11 | AES_128_CFB | 16 | 16 |
| 12 | AES_128_OFB | 16 | 16 |
| 13 | AES_192_ECB | 24 | 0 |
| 14 | AES_192_CBC | 24 | 16 |
| 15 | AES_192_CFB | 24 | 16 |
| 16 | AES_192_OFB | 24 | 16 |
| 17 | AES_256_ECB | 32 | 0 |
| 18 | AES_256_CBC | 32 | 16 |
| 19 | AES_256_CFB | 32 | 16 |
| 20 | AES_256_OFB | 32 | 16 |
##### TCipher 类的属性
@@ -3204,7 +3225,6 @@ end;
return r;
```
###### StringsW
- Values
@@ -3264,7 +3284,6 @@ obj.ValueFromIndex(1) := "888"; // 写入,即给指定位置的value重新赋
return array(s0, obj.DelimitedText);
```
###### TextW
- Values
@@ -3435,7 +3454,6 @@ obj.CommaText := 'ABC,12,"3,a""bc"';
return array(obj.strings(0), obj.strings(1), obj.strings(2));
```
###### DelimitedText
范例
@@ -3456,7 +3474,6 @@ for i := 0 to SN - 1 do r[i] := obj.strings(i);
return r;
```
###### Names
范例
@@ -4089,7 +4106,6 @@ obj.GetStrings(getObj);
return getObj.GetText();
```
###### SetStrings
范例
@@ -4119,7 +4135,6 @@ obj.GetStrings(getObj);
return getObj.GetText();
```
##### TMemIniFile 的属性
###### CaseSensitive
@@ -4153,7 +4168,6 @@ t2 := obj.ReadString("test", "string", ""); // 大小写不一致
return array(t1, t2);
```
#### TRegistryIniFile 对象
参考:TIniFile 对象
@@ -4492,6 +4506,7 @@ Session 管理器,可以用来在 WEB 服务器端存贮信息,例如存贮
```tsl
TSessionMan 对象的创建方法:CreateObject("TSessionMan");
```
##### TSessionMan 的方法
###### NewSession
@@ -4841,7 +4856,6 @@ if ret then return msg;
else return "获取指定邮件前3行内容失败!";
```
###### RetrieveMsgSize
范例
@@ -4880,7 +4894,6 @@ if ret then return msg.asstring;
else return "获取指定邮件内容失败!";
```
###### RetrieveHeader
范例 01:获取指定邮件头部信息
@@ -4893,7 +4906,6 @@ if ret then return msg.asstring;
else return "获取指定邮件内容失败!";
```
###### RetrieveRaw
范例 01:获取指定邮件的原始内容
@@ -4906,7 +4918,6 @@ if ret then return msg;
else return "获取指定邮件内容失败!";
```
###### UIDL
范例
@@ -4951,7 +4962,6 @@ pop3Obj := new pop3("pop3.tinysoft.com.cn", "username", "password");
return := pop3Obj.CAPA();
```
##### Pop3 对象属性
###### AuthType