有状态 & 无状态

1、有状态服务、无状态服务
对服务器程序来说,究竟是有状态服务,还是无状态服务,其判断依旧是指两个来自相同发起者的请求在服务器端是否具备上下文关系。

(1)有状态服务。
是指程序在执行过程中生成的中间数据。服务器端一般都要保存请求的相关信息,每个请求可以默认地使用以前的请求信息。

(2)无状态服务。
是指容器在运行时,不在容器中保存任何数据,而将数据统一保存在容器外部,比如数据库中。服务器端所能够处理的过程必须全部来自于请求所携带的信息,以及其他服务器端自身所保存的、并且可以被所有请求所使用的公共信息。

2、有状态对象、无状态对象

(1)有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有实例变量的对象,可以保存数据,是非线程安全的。在不同方法调用间不保留任何状态。

(2)无状态就是一次操作,不能保存数据。无状态对象(Stateless Bean),就是没有实例变量的对象.不能保存数据,是不变类,是线程安全的。
### Unity序列化字段的方法和属性 在 Unity 中,为了使类或结构体中的字段能够被编辑器识别并保存至场景或预制件中,需标记这些字段为 `public` 或者使用 `[SerializeField]` 属性将其设为可序列化的私有成员[^3]。 #### 使用 `[System.Serializable]` 和 `[SerializeField]` 当定义自定义的数据容器(如 C# 类或结构),应在其上应用 `[System.Serializable]` 特性以指示该类型可以参与序列化进程。对于那些不希望公开访问但仍需通过 Inspector 编辑的字段,则可以在其声明之前加上 `[SerializeField]` 属性: ```csharp using UnityEngine; [System.Serializable] public class PlayerData { public string playerName; [SerializeField] private int healthPoints; // ... other fields and methods ... } ``` 此代码片段展示了如何创建一个名为 `PlayerData` 的可序列化类,并包含两个字段:一个是公共字符串类型的玩家名称;另一个是带有 `[SerializeField]` 标记的整数型生命值,在默认情况下它不会显示于 Inspector 中除非显式指定允许这样做[^1]。 #### 处理特殊情形下的序列化问题 需要注意的是,某些特定条件下可能会遇到序列化异常情况,比如处理含有 null 值的对象时可能导致无限递归从而影响性能。为了避免此类问题的发生,开发者应当谨慎对待可能为空引用的情况,并考虑采用合适的策略来规避风险,例如手动控制对象生命周期或是利用条件判断防止不必要的实例化操作[^2]。 #### 自定义序列化行为 除了基本的字段序列化外,还可以重写 MonoBehaviour 组件里的虚函数 `OnBeforeSerialize()` 和 `OnAfterDeserialize()`, 这样便能在每次执行相应动作前后加入额外逻辑,确保数据的一致性和完整性[^4]: ```csharp using UnityEngine; public class CustomSerializableComponent : MonoBehaviour { void OnBeforeSerialize(){ // 执行一些预处理工作... } void OnAfterDeserialize(){ // 反序列化完成后做一些恢复设置... } } ``` 上述例子说明了怎样扩展 MonoBehviour 来实现更复杂的序列化需求,而不仅仅是简单的字段映射关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值