我应该使用什么变量类型来存储非密封类或接口的类型?

时间:2016-02-04 02:09:36

标签: c# class types interface

自述

  • 我有成千上万的生物,每个生物都来自 的生物即可。
  • 生物的一个例子是 Creature_MoonDancer
  • Creature 是一个只有在 CreatureData 对象传递到其构造函数时才能实例化的类。
  • 我想找到一种方法来限定任何继承的密封类型 生物词典中的 CreatureData
  • 每个生物最多只能连接1个实例 creatureDatabaseDictionary中的 CreatureData

这是 CreatureData ,这是一个包含信息的类,需要输入 Creature 的构造函数来实例化它:

&(conn->db->rows[id])

这里我有一个抽象类生物,它包含了一个生物。

--CreatureData.cs

using UnityEngine.UI;

[System.Serializable]
class CreatureData {
    //To be set by Unity engine's inspector.
    [SerializeField] private Sprite creatureHead;
    [SerializeField] private int creatureStartingDamage;
    Sprite CreatureHead {
        get{
            return creatureHead;
        }
    }
    Sprite CreatureStartingDamage {
        get{
            return creatureStartingDamage;
        }
    }
}

有数以千计的密封生物类型来自生物,这是一个例子:

--Creature.cs

public class Creature {
    protected Sprite creatureHead;
    protected int creatureDamage;
    public Creature(CreatureData creatureData){
        creatureHead = creatureData.CreatureHead;
        creatureDamage = creatureData.CreatureStartingDamage
    }
    public abstract void getAttackedBy(Creature other);
}

CreatureDatabase将包含一个 Dictionary ,用于存储 CreatureData ,并将从 Creature 派生的任何密封类链接到最多1个对应的 CreatureData ::

--Creature_MoonDancer.cs

public sealed class Creature_MoonDancer : Creature{
    private int moonOrbsInPossession;
    public Creature_MoonDancer (CreatureData creatureData, int startingMoonOrbs) : base(creatureData){
        moonOrbsInPossession = startingMoonOrbs;
    }
    public override void getAttackedBy(Creature other){
        if(moonOrbsInPossession > other.creatureDamage){
            Debug.Log("MoondancerWins");
        }
        else if(Random.value < 0.5)
            Debug.Log("MoondancerDies");
        else
            Debug.Log("MoondancerWins");
    }
}

以下是游戏经理试图从creatureDatabaseDictionary 字典中获取值:

--CreatureDatabase.cs

public class CreatureDatabase : MonoBehaviour {
    private static class CreatureDataCustomSerializableDictionary
        : CustomSerializableDictionary<typeof(Creature),CreatureData> {}
    //TODO: Create custom property drawer for CustomSerializableDictionary
    [SerializeField] private CreatureDataCustomSerializableDictionary creatureDatabaseDictionary;

    public CreatureDatabaseDictionary {
        get{
            return creatureDatabaseDictionary;
        }
    }
}

以下是一些项目要求:

  • 游戏平衡团队需要平衡游戏 修改代码。
  • 重要:游戏平衡小组必须无法插入任何keyvaluepairs 不是生物类型的键。

1 个答案:

答案 0 :(得分:2)

这是您编写的代码,以便使用示例分配进行编译:

public interface mybaby {}
public class mytom : mybaby {}
public class mydick : mybaby {}
public class myharry : mybaby {}

public class Test
{
    mybaby mychild = new myharry();
}

这是有效的C#代码。