🎨 style(markdown): format markdown files
This commit is contained in:
@@ -313,6 +313,7 @@ TSL 继承的实现方式是:声明类类型时,在 `class` 后的括号中
|
||||
```tsl
|
||||
type MyClass = class(BaseClass1[, BaseClass2, ...]);
|
||||
```
|
||||
|
||||
以上代码定义了一个叫做 myClass 的类,它继承自 BaseClass1、BaseClass2 列表。这样我们称 MyClass 为子类,BaseClass1,BaseClass2…为 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
|
||||
|
||||
Reference in New Issue
Block a user