我如何制作一个特定类的列表,但仍然允许类的扩展在列表中使用它们的所有参数
本文关键字:列表 扩展 许类 参数 何制作 一个 | 更新日期: 2023-09-27 18:02:32
所以我正在为unity c#编写一个道具系统,我有这个基础道具类,我扩展了不同类型的道具,例如,我将扩展这个基础类,添加一个攻击和攻击速度的变量,以及一个攻击武器类的函数。
但我的问题是,我正在为这些道具编写一个数据库,我希望将这些不同的类存储到一个大列表中,但当我制作基础道具列表时,我传递了一个武器道具,它分离了攻击函数和攻击变量,基本上将武器道具变成了基础道具,使其变得无用。
如果您正在研究RDBMS,而不是像SledgeHammer建议的NOSQL,那么您可能会在这里找到答案。
在关系数据库中有两种主要的方法,这是最常见的数据库系统。
-
每种类型的Item可以有不同的表,因此
Weapon
有一个表,Potion
有另一个表,Item
表是(Name, Type, Id)
元组的列表,告诉您要查看哪个表中的哪个项目以获得其确切细节。这个将要求每个类别的项目一个表,但如果你小心的话,你只需要几个。 -
有一个
Item
表,它存储一个项目类型(再次)。你也有一个"属性"表,它有ItemId, Attribute, Value
列,所以如果你有一把剑,速度5,伤害10,和一个药水,治疗3,你会有以下行Item ==== Id | Name | Category 1 | "Sword" | "weapon" 2 | "Healing Potion" | "potion" Attribute ========= ItemId | Attribute | Value 1 | "speed" | 5 1 | "damage" | 10 2 | "healing" | 3
然后由您对ItemId进行join
,并将pivot
将行转换为列并转换为项目的类。
或者您可以使用基于文档的数据库,正如其他答案所建议的。
听起来您想使用文档存储而不是RDBS。RDBS要求表中的所有项都具有相同的类型。缺点是,对于不包含所有列的类型,您最终会得到一堆NULL列,这使得一切都是假的。文档存储是无模式的,因此您只拥有属于该类型的属性。