我有一个原始的 C# 类,标记为
[Serializable]
。这些字段都是公共的,因为对象是使用 Newtonsoft JSON.NET 保存到文件中的。
[Serializable]
public class PlayerGlobalAggregateData
{
public int timesPlayed;
public int timesCleared;
public int timesFailed;
public PlayerGlobalAggregateData(int timesPlayed = default,
int timesCleared = default,
int timesFailed = default)
{
this.timesPlayed = timesPlayed;
this.timesCleared = timesCleared;
this.timesFailed = timesFailed;
}
}
现在我有一个可编写脚本的对象,其中我有这个类实例作为成员变量:
public class PlayerGlobalAggregateModel : ScriptableObject
{
private PlayerGlobalAggregateData _data;
public void SetModelData(PlayerGlobalAggregateData data)
{
_data = data;
//TestCoroutine();
}
public PlayerGlobalAggregateData GetPlayerAggregateData()
{
//TestCoroutine();
return _data;
}
}
执行此类操作背后的想法是,我使用方法
_data
方法将文件中的所有数据加载到成员变量 SetModelData();
中。在整个游戏过程中,我修改了模型,并在保存回文件时使用 GetPlayerAggregateData()
。
现在困扰我的是,任何将此可编写脚本的对象作为引用的类都可以访问
_data
字段中的所有数据,甚至可以修改它,因为这些字段在 PlayerGlobalAggregateData
类中都是公共的。
如何更好地封装这些字段?
我不知道该怎么做。
您可以将字段标记为私有并使用适当的属性进行装饰,例如。
[SerializeField][JsonProperty] private int someDataField;
然后为每个应该可以从外部访问的变量公开一个 getter 属性,例如。
public int SomeDataField => someDataField;
这允许在统一检查器中通过
编辑私有字段[SerializeField]
并允许 JSON.Net 通过
序列化私有字段[JsonProperty]