Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该使用什么变量类型来存储非密封类或接口的类型? 自述 我有成千上万的生物,每一种生物都来自 生物 生物的一个例子是生物\月亮舞者 creative是一个类,只有将creatiuredata对象传递到其构造函数中,才能实例化该类 我想找到一种方法来确定继承自的任何密封类型的范围 生物到一个字典中的生物数据 每个生物最多只能链接一个实例 creatureDatabaseDictionary中的CreatureData_C#_Class_Types_Interface - Fatal编程技术网

C# 我应该使用什么变量类型来存储非密封类或接口的类型? 自述 我有成千上万的生物,每一种生物都来自 生物 生物的一个例子是生物\月亮舞者 creative是一个类,只有将creatiuredata对象传递到其构造函数中,才能实例化该类 我想找到一种方法来确定继承自的任何密封类型的范围 生物到一个字典中的生物数据 每个生物最多只能链接一个实例 creatureDatabaseDictionary中的CreatureData

C# 我应该使用什么变量类型来存储非密封类或接口的类型? 自述 我有成千上万的生物,每一种生物都来自 生物 生物的一个例子是生物\月亮舞者 creative是一个类,只有将creatiuredata对象传递到其构造函数中,才能实例化该类 我想找到一种方法来确定继承自的任何密封类型的范围 生物到一个字典中的生物数据 每个生物最多只能链接一个实例 creatureDatabaseDictionary中的CreatureData,c#,class,types,interface,C#,Class,Types,Interface,下面是CreatureData,一个类,其中包含的信息需要输入到生物的构造函数中进行实例化: --CreatureData.cs using UnityEngine.UI; [System.Serializable] class CreatureData { //To be set by Unity engine's inspector. [SerializeField] private Sprite creatureHead; [SerializeField] pr

下面是CreatureData,一个类,其中包含的信息需要输入到生物的构造函数中进行实例化:

--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);
}

生物衍生出数千种密封生物类型,以下是一个示例:

--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");
    }
}

以下是一些项目要求:

  • 游戏平衡团队需要在没有任何限制的情况下平衡游戏 修改代码
  • 重要信息:游戏平衡团队不得插入任何具有 不是生物类型的钥匙

以下是您编写的代码,以便使用示例赋值进行编译:

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

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

这是有效的C代码。

为什么
typeof(mybaby)
而不仅仅是
mybaby
?它不是
typeof(string)message=“hello”我不想在mychild中存储以mybaby为基础的对象的实例。我只想将mybaby作为基础的非密封类或接口的类型存储到mychild中。无论如何,无法创建抽象类的实例。一种方法是创建一个所有mybaby孩子都实现的IBaby接口,然后需要一个
类型
变量。不能将可能的值约束到特定类型的子类,除非将其包装到属性中并执行运行时检查。如果要存储类型,请使用
类型
类型。
typeof
运算符返回一个
Type
对象,然后可以将该对象分配给
Type
类型的变量。OP询问-(1)如果
myharry
有许多数据成员并浪费大量内存怎么办?(2) 我想保留使
myharry
成为抽象类的自由。我不知道有多少数据成员会影响这一点。我不明白为什么它会浪费很多内存。您是否认为通过将
myharry
分配给
mybaby
它会以某种方式改变类型?没有。它仍然是一个
myharry
类型,它只是作为
mybaby
类型分配给变量。最终,您需要创建一个可以分配给
mybaby
的对象实例。因此,如果
myharry
是抽象的,那么您将拥有
公共类my孙子:myharry{…}
,然后您将使用它,比如
mybaby mychild=new my孙子()。关于内存浪费,我没有理由在代码中使用mychild实例。我所需要的只是类型。@RyanAWE-声誉是为了给人们时间去理解规则。例如,回答自己的问题,而不是留下评论或编辑问题
--GameManager.cs

public class GameManager : MonoBehaviour{
    [SerializeField] private CreatureDatabase creatureDatabase;
    private Creature SummonMoonDancer(){
        CreatureData creatureData;
        bool success = creatureDatabase.CreatureDatabaseDictionary.TryGetValue(typeof(Creature_MoonDancer), out creatureData);
        if(success == false){
            Debug.LogError("Tried summoning MoonDancer when creature database did not have a typeof(MoonDancer) key");
        }
        else{
            return new Creature_MoonDancer(creatureData), Player.GetInt("NumberOfMoonorbsInPlayersPouch");
        }

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

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