我如何制作一个特定类的列表,但仍然允许类的扩展在列表中使用它们的所有参数

本文关键字:列表 扩展 许类 参数 何制作 一个 | 更新日期: 2023-09-27 18:02:32

所以我正在为unity c#编写一个道具系统,我有这个基础道具类,我扩展了不同类型的道具,例如,我将扩展这个基础类,添加一个攻击和攻击速度的变量,以及一个攻击武器类的函数。

但我的问题是,我正在为这些道具编写一个数据库,我希望将这些不同的类存储到一个大列表中,但当我制作基础道具列表时,我传递了一个武器道具,它分离了攻击函数和攻击变量,基本上将武器道具变成了基础道具,使其变得无用。

如果您正在研究RDBMS,而不是像SledgeHammer建议的NOSQL,那么您可能会在这里找到答案。

我如何制作一个特定类的列表,但仍然允许类的扩展在列表中使用它们的所有参数

在关系数据库中有两种主要的方法,这是最常见的数据库系统。

  1. 每种类型的Item可以有不同的表,因此Weapon有一个表,Potion有另一个表,Item表是(Name, Type, Id)元组的列表,告诉您要查看哪个表中的哪个项目以获得其确切细节。这个要求每个类别的项目一个表,但如果你小心的话,你只需要几个。

  2. 有一个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列,这使得一切都是假的。文档存储是无模式的,因此您只拥有属于该类型的属性。