更新说明,修复文本包裹器中size没有正确结束的问题

This commit is contained in:
2025-04-27 13:38:29 +08:00
parent d282d66f01
commit 7a7424d4b1
2 changed files with 74 additions and 4 deletions

View File

@@ -1,4 +1,6 @@
# Deconstruction
<h2 align="center">Deconstruction</h2>
<a href="https://gitee.com/none_9_0/xeric-library2"> 发布页面</a>
## 简介
@@ -150,7 +152,9 @@ XericLibrary 部分由两个dll组成一个是 Xeric Library另一个是 X
#### 曲线宏
#### 枚举宏
枚举宏包含一个缓存封装器,
枚举宏包含一个缓存封装器,可以通过<code>MacroEnum\<enum\></code>来定义。
定义枚举结构封装将允许像列表一样访问这个枚举,或将枚举实例赋予,通过枚举封装器来操作枚举值。
在新版中,枚举封装器可以使用单例写法访问,而不再需要手动声名保存实例了。
#### 方程宏
#### 事件宏
@@ -159,6 +163,53 @@ XericLibrary 部分由两个dll组成一个是 Xeric Library另一个是 X
#### 按键宏
#### 集合宏
#### 数学宏
#### 消息库
预设一些消息处理流程。
* 全局业务分发器消息入口Entry。
特点是需要通过指定消息入口(<code>RedirectReceiverMessage</code>)和出口(<code>RedirectReceiver</code>)来中转消息。
完成后消息发送时会被进行一次包装,将带有入口名称的内容一同发送;而在消息处理的另一端,也需要用相同的逻辑处理这个包,就能获得这个包来自哪,并自动定位到对应的预定义委托上进行处理。
下面是一个接收示例:
```
// 声名一个消息处理器委托
// 接收器形参可以是任何可以序列化的结构,或是无形参接收器。
public MacroMessage.ReceiverObject<int> myFunc;
public void Awake()
{
// 初始化函数中注册这个委托,并赋予一个名称用于标识
myFunc.RedirectReceiver(nameof(myFunc));
myFunc += Func;
}
// 处理消息
public void Func(int number)
{
// 消息处理
}
```
下面是一个发送示例:
```
// 在收到文本消息后,立刻发送给重定向器
void OnMessage(string message)
{
MacroMessage.RedirectReceiverMessage(message);
}
```
最后,需要定义何时处理消息:
```
// 比如放在帧更新事件中,消息会作为队列加入,然后逐个处理。
void Update()
{
MacroMessage.MainThreadProcessingMessage();
}
```
* 方法封装器
提供一个方法软引用封装器,首先需要将一个可执行流程转换为<code>CallableTarget</code>对象。然后通过<code>AddCallableFunction</code>添加到全局字典中,随后可以通过<code>TryEvocation</code>或者<code>Evocation</code>调用。
方法封装器默认可以搜索所有静态,实例,私有,公共的方法
#### 对象宏
#### PID宏
#### 对象池宏
@@ -175,7 +226,8 @@ XericLibrary 部分由两个dll组成一个是 Xeric Library另一个是 X
#### 平滑宏
#### 排序宏
c#自带的排序很好用,但是选择何种排序模式是自动进行的,排序宏中提供了可以手动选择的排序算法
c#自带的排序很好用,但是选择何种排序模式是根据数据类型自动切换的
在这里,排序宏中提供了一些可以手动选择的排序算法。
注:没有猴子排序。
#### 文本宏
@@ -195,6 +247,24 @@ c#自带的排序很好用,但是选择何种排序模式是自动进行的,
TextBlockBuilder 是所有blocker的基类使用它包裹所有文本将起到单纯拼接文本的作用TextBlockBuilder 里的三个block的作用是使用相应的富文本标签包裹根据标签的类型包裹器会自动决定标签格式。
<code>DelegateBlock</code>的作用是通过委托来实时获取一个变量示例中直接获取value的文本值拼接到结果中。
TextBlockBuilder 可以不依靠如<code>DelegateBlock</code>这样的包裹器可以直接将返回字符串类型的方法委托传入blocker 会自动识别;前提是开启对应 blocker 里的<code>compatibility</code>兼容性检查,但这会带来额外的性能开销,如果没有特别的需求,建议还是使用<code>DelegateBlock</code>进行多态封装,这样也会更安全。
在新的更新中,包裹器支持大括号写法,同时可以省略部分参数:
```
_blockBuilder = new TextBlockBuilder()
{
new ColorBlock()
{
"重量"
},
new DelegateBlock(() => value.ToString()),
new SizeBlock(20)
{
"kg"
}
};
```
这里的作用与上面的示例完全一致,更新的包裹器中支持自动填入更多的默认值了,比如颜色默认为白色。
* 文本转换:自动值转换为文本。
* NumberToChinese将数值转为中文大写。
* 沃格纳费舍尔拼写检查器:检查一对或多对文本是否相似,返回最相似的文本序列,及相似度。
@@ -313,7 +383,7 @@ TimeStamp用于隐式的在极短时间内小于1tick的时间戳的名
### 基础使用
数据库操作的指令被抽象到Order类了我在注释里会称为解释器比如sqlClient就是sqlcOrder其中sqlc代表sqlclient。
数据库操作的指令被抽象到Order类了注释里会称为解释器比如sqlClient就是sqlcOrder其中sqlc代表sqlclient。
order类本质上是一个文本拼接器为了方便管理你可以使用对应类的order.GetOrder来获取池中的一条指令比如
```
var orderValues = SQLCHelper.GetOrder();

Binary file not shown.